JWT( JSON WEB TOKEN ) 란?

백종석·2022년 6월 2일
0

TIL

목록 보기
8/9

1.JWT(JSON WEB TOKEN)


  • JWTJSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.
  • 전자 서명은 JSON 의 변조를 체크 할 수 있게되어 있습니다.
  • JWT속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.
  • JWT서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
  • 이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.
  • JWTHMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.



2.JWS(JSON WEB SIGNATURE) 와 JWE(JSON WEB ENCRYPTION)


JWS(JSON Web Signature)

  • JWS(JSON Web Signature)는 JSON 데이터 구조를 사용하는 서명 표준이며,
  • 간단히 말하면 “JSON으로 전자 서명을하여 URL-safe 문자열로 표현한 것”입니다.

JWE(JSON Web Encryption)

  • JWE(JSON Web Encryption)는 JSON 데이터 구조를 사용하는 암호화 방법입니다.
  • JWE(JSON Web Encryption)“JSON을 암호화하여 URL-safe 문자열로 표현한 것” 입니다.



3.JWT 토큰 구성


  • JWT는 세 파트로 나누어지며, 각 파트는 점으로 구분하여 xxxxx.yyyyy.zzzzz로 표현됩니다. 순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)으로 구성합니다.
  • Base64 인코딩의 경우 “+”, “/”, “=”이 포함되지만 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe 한 Base64url 인코딩을 사용합니다.
  • 헤더(Header)는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다.
    • 첫째는 토큰의 유형 (JWT)을 나타내고,
    • 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분입니다.
  • 페이로드(Payload)는 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. 페이로드(Payload)에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임들을 넣을 수 있습니다.

    • 클레임의 정보는 등록된 (registered) 클레임, 공개 (public) 클레임, 비공개 (private) 클레임으로 세 종류가 있습니다.
  • 마지막으로 서명(Sinature)은 secret key를 포함하여 암호화되어 있습니다.



4.JWT PROCESS


  1. 사용자가 id와 password를 입력하여 로그인을 시도합니다.
  2. 서버는 요청을 확인하고 secret key를 통해 Access token을 발급합니다.
  3. JWT 토큰을 클라이언트에 전달 합니다.
  4. 클라이언트에서 API 을 요청할때 클라이언트가 Authorization header에 Access token을 담아서 보냅니다.
  5. 서버는 JWT Signature를 체크하고 Payload로부터 사용자 정보를 확인해 데이터를 반환합니다.
  6. 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공합니다.
  • 인증이 필요한 경로에 접근할 때 서버 측은 Authorization 헤더에 유효한 JWT 또는 존재하는지 확인합니다.
  • JWT에는 필요한 모든 정보를 토큰에 포함하기 때문에 데이터베이스과 같은 서버와의 커뮤니케이션 오버 헤드를 최소화 할 수 있습니다.
  • Cross-Origin Resource Sharing (CORS)는 쿠키를 사용하지 않기 때문에 JWT를 채용 한 인증 메커니즘은 두 도메인에서 API를 제공하더라도 문제가 발생하지 않습니다.
  • 일반적으로 JWT 기반의 인증 시스템은 위와 같은 프로세스로 이루어집니다.
    처음 사용자를 등록할 때 Access tokenRefresh token이 모두 발급되어야 합니다.



5.JWT 장점과 단점


JWT 장점

  • JWT의 주요한 장점은 사용자 인증에 필요한 모든 정보가 토큰 자체에 포함되기 때문에 별도의 인증 저장소가 필요없다는 것입니다.
  • 분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 인가 방법을 제공합니다.
  • 개별 마이크로 서비스에는 토큰 검증과 검증에 필요한 비밀 키를 처리하기 위한 미들웨이가 필요한데, 검증은 서명 및 클레임과 같은 몇 가지 매개 변수를 검사하는 것과 토큰이 만료되는 경우로 구성됩니다.
  • 토큰이 올바르게 서명되었는지 확인하는 것은 CPU 사이클을 필요로하며 IO 또는 네트워크 액세스가 필요하지 않으며 최신 웹 서버 하드웨어에서 확장하기가 쉽습니다.

JWT 단점

  • 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없습니다.
  • 더 많은 필드가 추가되면 토큰이 커질 수 있습니다.
  • 상태 비저장(stateless) 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있습니다.

출처 : http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

profile
항해중인 우당탕탕 코린이

0개의 댓글