오늘은 로그인할 때 맨날 받던 JWT가 도대체 뭔가에 대해서 파악해보았다.
우선 JWT를 알기전에 인증 인가에 대한 간략한 사전지식 사이트다.
알고보면 도움이 될거같아 첨부.
http://www.opennaru.com/opennaru-blog/jwt-json-web-token-with-microservice/
JWT(JSON Web Token) 토큰이란?
JWT 토큰은 JSON객체형식의 자체적인 정보를 담고 토큰이다.
자체적인 정보는 토큰정보(Header), 전달할정보(Payload), 검증정보(signature)를 가지있다.
로그인부분에서 사용되며 JWT Process로는
사용자 로그인 -> 서버는 screct key를 통해 Accesstoken을 발급 ->
클라이언트에 JWT를 전달 (다시말해 localStorage에 토큰을 저장) ->
유저는 서비스 요청을 보낼 때 Header에 JWT토큰을 전달 -> 서버는 Header의 토큰 서명을 체크하고 유저정보를 확인 -> 유저의 서비스 요청에 대한 응답 전달
JWT 구성요소
JWT는 세 파트로 나누어지며
Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.
Payload는 토큰에 담을 정보로 구성되어있다.
정보는 JSON형태이며, 이 정보를 클레임(claim)이라고 부른다.
토큰에는 여러개의 클레임을 넣을 수 있다. 3종류의 클레임을 알아보자.
클레임의 정보는 등록된 (registered) 클레임, 공개 (public) 클레임, 비공개 (private) 클레임으로 세 종류가 있습니다.
정리가 잘 되어있는 아래 이미지를 확인하자.
위에 정보를 보고 아래 이미지를 확인해보면
iss,exp같은 경우는 등록된(registered) 클레임 부분이고
url형식은 공개된(public) 클레임 ( 중복 방지를 위한 url형식의 이름사용 )
userId, username은 비공개(private) 클레임 (이부분이 우리가 토큰에서 전달받는 유저정보)
Signature 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.
헤더(Header)와 페이로드(Payload)의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.
JWT 토큰의 장점
JWT 토큰의 단점
참고사이트 :
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
https://gorokke.tistory.com/181