JWT(Json Web Token) 토큰 1

작성자 : 조회수 :

저는 지금까지 로그인 처리를 모두 전통적인 session으로만 다뤘습니다.

 

하지만 이제 백과 프론트를 나눔에 따라 토큰이 반드시 필요하다는 걸 느껴 이렇게 공부합니다.

 

 

 

 

JWT ?

 

조금 정의하기 어려웠습니다. (조금 더 공부해서 틀린 게 있다면 수정하겠습니다.)

 

Json을 사용해 사용자의 표명(assert), 클레임(claim)를 처리하는 json을 보관하는 웹 표준(RFC 7519),

 

암호화 된 토큰입니다. (위키백과 참고)

 

여기서 클레임(정보의 한조각)이라는 것은 예를 들어 나는 일반 유저다라는 걸 담았을 때

 

서버에서는 암호화된 정보를 해석해 통과된다면 일반 유저라는 걸 인증 완료된 것입니다.

 

 

사실 뜻 자체는 엄청 어려웠지만 사실

 

Stateless http통신에서 session없이 인증을 거치고

 

인가를 (어떻게 유저인지, 어드민 인지 구분해야 할까) 어떻게 줄지 생각해보면

 

쉽게 접근할 수 있었습니다.


한마디로 서버에게 인증 받기 위해 해당 사용자의 정보를 담은 암호화된 토큰!

 

이라고 생각하시면 될 것 같습니다.





토큰을 이용한 과정을 그려봤습니다.




JWT 구조를 보여줍니다.


앞서 말씀 드린 클레임을 담는 부분입니다.


기본적인 클레임 들은

 

iss : 토큰 발급자 (issuer)

sub : 토큰 제목 (subject)

aud : 토큰 대상자 (audience)

exp : 토큰 만료시간 (expiration) 토큰 만료시간입니다.

nbf : 토큰이 언제부터 유효한지 (Not Before)

iat : Issude At , 토큰 발행시간입니다.

jti : JWT ID : 토큰 자체의 아이디

등등 다양한 클레임 들이 있습니다.




Header 는 어떤 알고리즘인지와 어떤 타입인지를 담아주고있습니다.

 



마지막 서명 부분은 위에 말했던 구조의

 

Header + payload + 비밀번호를 합쳐

 

주어진 비밀키로 해쉬, 암호화 합니다.

 

 

 

 

이렇게 크게 구조 세가지를 알아봤습니다.





JWT 토큰은 이론적으로는

 

클라이언트에만 저장되는 것이 맞지만

 

보안을 위해서 redis, hazelcast등을 이용해서 이용 DB에 저장시키는 방법도 있습니다.

 

 

 

 

 

 

 

 

 

 

참고 :

 

스프링부트 Java/Spring 웹 개발 마스터 초격차 패키지 ,

https://velog.io/@syoung125/JWT-토큰이란