출처 :
JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.
전자 서명은 JSON 의 변조를 체크 할 수 있게되어 있습니다.
JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.
JWT는 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.
쉽게 설명하자면, JWT (Json Web Token)은 사용자인증을 필요로 하는 통신에서 Request의 헤더에 있는 Token 값으로 유저를 식별하여, 해당 유저의 인증절차를 간소화하는 기법이다. 위와 같은 기법으로 유저 식별이 필요한 기능에 대해 구분할 수도 있고, 쉽게 사용할 수 있다는 장점때문에 많은 언어와 플랫폼에서 사용이 되고 있다.
JWT 토큰의 구성의 위와 같이 헤더 . Payload . Signiture로 구분되어 있다. 각 구성의 역할은 다음과 같다.
header = {
"type": "JWT",
"alg": "HS256"
}
# eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
{"https://mangkyu.tistory.com": true }
{
"user_id": "1"
}
JSON Web Token의 마지막 부분으로 헤더의 인코딩값과, 정보의 인코딩 값을 합친후 주어진 비밀키로 해쉬를 하여 고유한 암호화 코드이다. BASE64로 인코딩하고, 인코딩한 값을 비밀키(SECRET_KEY)를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하여, 이값을 다시 BASE64로 인코딩한다.
일반적인 경우 위와 같은 순서로 진행하게 된다.
1. 클라이언트에서 로그인 요청이 왔을 때 서버에서 secret key를 활용하여 Access Token을 발급한다.
2. 서버에 요청과 권한을 확인하기 위해 헤더에 JWT 전달
3. JWT 서명을 체크하여 사용자 식별 및 권한 확인
4. 클라이언트에 따라 다른 응답 전달.
생성된 토큰은 HTTP 통신을 할 때 Authorization이라는 key의 value로 사용된다. 일반적으로 value에는 Bearer이 앞에 붙여진다.
{
"Authorization": "Bearer {생성된 토큰 값}"
}