JWT
는 JSON Web Token
의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.JWT
는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.JWT
는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.JWT
는 HMAC 알고리즘
을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.JWS(JSON Web Signature)
는 JSON 데이터 구조를 사용하는 서명 표준이며,JWE(JSON Web Encryption)
JWE(JSON Web Encryption)
는 JSON 데이터 구조를 사용하는 암호화 방법입니다.JWE(JSON Web Encryption)
는 “JSON을 암호화하여 URL-safe 문자열로 표현한 것” 입니다.JWT
는 세 파트로 나누어지며, 각 파트는 점으로 구분하여 xxxxx.yyyyy.zzzzz
로 표현됩니다. 순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)으로 구성합니다.Base64 인코딩
의 경우 “+”, “/”, “=”
이 포함되지만 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe 한 Base64url 인코딩을 사용합니다.페이로드(Payload)는 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. 페이로드(Payload)에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임들을 넣을 수 있습니다.
마지막으로 서명(Sinature)은 secret key를 포함하여 암호화되어 있습니다.
- 사용자가 id와 password를 입력하여 로그인을 시도합니다.
- 서버는 요청을 확인하고 secret key를 통해 Access token을 발급합니다.
- JWT 토큰을 클라이언트에 전달 합니다.
- 클라이언트에서 API 을 요청할때 클라이언트가 Authorization header에 Access token을 담아서 보냅니다.
- 서버는 JWT Signature를 체크하고 Payload로부터 사용자 정보를 확인해 데이터를 반환합니다.
- 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공합니다.
JWT
에는 필요한 모든 정보를 토큰에 포함하기 때문에 데이터베이스과 같은 서버와의 커뮤니케이션 오버 헤드를 최소화 할 수 있습니다.Cross-Origin Resource Sharing (CORS)
는 쿠키를 사용하지 않기 때문에 JWT
를 채용 한 인증 메커니즘은 두 도메인에서 API를 제공하더라도 문제가 발생하지 않습니다.JWT
기반의 인증 시스템은 위와 같은 프로세스로 이루어집니다.Access token
과 Refresh token
이 모두 발급되어야 합니다.JWT
의 주요한 장점은 사용자 인증에 필요한 모든 정보가 토큰 자체에 포함되기 때문에 별도의 인증 저장소가 필요없다는 것입니다.출처 : http://www.opennaru.com/opennaru-blog/jwt-json-web-token/