세션기반 인증 = 서버(혹은 DB)에 유저 정보를 담는 방식
위 같은 세션기반 인증이 주는 부담을 클라이언트에게 넘겨줄 방법을 고안해서 나온 것이 대표적으로 토큰기반 인증 JWT(JSON Web Token)이다.
여기서 토큰은 유저 정보를 암호화한 상태로 담을 수 있고, 암호화했기 때문에 위험성이 낮다.
종류
Access Token : 보호된 정보들에 접근할 수 있는 권한부여에 사용
Refresh Token : Access Token 유효기간이 만료되면 새로운 Access Token을 발급 받는다.
JSON 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰
ex)
{"alg":"HS256", "typ":"JWT"}
{"sub":"someInformation",
"name":"phillip",
"iat":15162339}
HMACSHA256(
base64UrlEncode(header)+"."+
base64UrlEncode(payload),
secret
)
클라이언트가 서버에 아이디/비번을 담아 로그인 요청을 한다.
아이디/비번이 일치하는지 보고, 클라이언트에 보낼 암호화된 토큰을 생성
Access/Refresh 토큰 둘다 생성
토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.
클라이언트가 HTTP 헤더에 토큰을 담아 보낸다.
서버는 토큰을 해독하여 인증이될 경우, 클라이언트의 요청을 처리한 후 응답 해준다.
Statelessness & Scalability (무상태성 & 확장성)
서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
토큰을 헤더에 추가함으로 인증절차 완료
안정성
암호화 한 토큰을 사용
암호화 키를 노출 할 필요 X
어디서나 생성 가능
토큰을 생성하는 서버가 꼭 토큰을 만들지 않아도 됨
권한 부여에 용이
토큰의 내용물 안에 어떤 정보에 접근 가능한지 정의