이번에 토이프로젝트로 jwt를 사용해 인증을 하는 프로세스를 개발했다. 주로 다른 렌퍼런스를 참고했을 때 인증을 위해 리프레시 토큰, jwt, redis, springfilter 를 사용하여 구현을 하는데 역량부족으로 인터셉터와 디비 만을 사용하여 로직을 구현했다. 물론 리팩토링을 할 예정이다.
자가 수용적? 토큰의 기본정보, 전달할 정보, 인증 가지 자기 자신이 지니고 있음을 뜻한다.
정의
json web token 의 약자로 json 객체를 사용하여 가볍고 자기 수용적인 방식으로 정보를 안정성있게 전달하기 위한 방법이다. RFC 7519의 기준이다.
jwt 토큰은 . 을 구분자로 3가지 문자열로 구성되어있으며
xxxxx.yyyyy.zzzzz
헤더, 페이로드, 서명으로 이뤄져있다.
헤더는 일반적으로 2가지 정보를 내포한다.
예를들어
{
'alg' : "HS256",
'typ' : 'jwt'
}
위의 해더는 HS256으로 서명된 jwt를 의미한다.
토큰의 두번째 부분은 페이로드다. 페이로드는 claims를 포함한다. claim은 개체나 추가적인 정보를 의미한다. resisterd claims, pulibc slaims, private claims 3가지 종류의 클래임이 존재한다.
헤더의 인코딩 값과 페이로드의 인코딩 값을 합친후에 주어진 비밀키로 해쉬하여 생성한다. 이렇게 만든 해쉬값을 base64형태로 나타나게 된다.
간략하게 인증시에 어떻게 사용했는지 정리해본다.
인증 과정은 jwt와 인터셉터를 활용하여 이뤄 집니다.
로그인 시 access token과 refresh token이 발급 되며 기본적으로 어세스 토큰으로 인증과 인가가 이뤄진다. 인증 성공시 요청한 자원을 응답한다.
어쎄스토큰 만료시 refresh 토큰을 사용자 정보를 식별하여 access token을 재발급합한다.
가계부와 관련된 url로 접근시 인증이 이뤄지며, 인증 실패 시 로그인 페이지로 리다이렉트 한다.
https://jwt.io/introduction
https://gyoogle.dev/blog/web-knowledge/JWT.html