JSON Web Token은 웹표준으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안전성 있게 전달해주는 것을 의미힌다.
장점
회원인증
JWT
를 포함하여 전달 정보교류
JWT는 .을 구분자로 3가지의 문자열로 되어있다.
헤더는 두가지의 정보를 지니고 있다.
type : 토큰의 타입을 지정한다.
alg : 해싱 알고리즘을 지정한다.
{
"typ" : "JWT",
"alg" : "HS256"
}
base64 인코딩 =>
Result:
header : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
정보 부분에는 토근에 담을 정보가 들어있다. 여기에 담는 정보의 한 조각을 클레임이라고 부르고, 이는 name,value의 한 쌍으로 이루어져있다.
클레임의 종류
{
"iss": "go286.com", //토큰 발급자 //등록
"exp": "1485270000000", // 토큰의 만료시간 //등록
"https://go286.com/jwt_claims/is_admin": true, //공개
"userId": "11028373727102", //비공개
"username": "go286" //비공개
}
base64 인코딩 =>
Result:
payload: eyJpc3MiOiJnbzI4Ni5jb20iLCJleHAiOiIxNDg1MjcwMDAwMDAwIiwiaHR0cHM6Ly9nbzI4Ni5jb20vand0X2NsYWltcy9pc19hZG1pbiI6dHJ1ZSwidXNlcklkIjoiMTEwMjgzNzM3MjcxMDIiLCJ1c2VybmFtZSI6ImdvMjg2In0.
서명은 헤더의 인코딩값과 정보의 인코딩값을 합친 후에 주어진 비밀키로 해쉬를 하여 생성합니다.
서명 부분을 만드는 슈도코드(pseudocode) 구조
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
) //체크박스 secret base64 encoded
문자열을 인코딩 하는게 아닌 hex -> base64인코딩 해야한다.
Result:
signature: MX-PsAy1xLkX0UOwxf-gqV5Ine-la-Q6bMzQ_EpQyNM
위에서 구한 값들을 .
을 중간자로 다 합쳐주면 하나의 토큰이 완성된다.