Spring에서 Session 기반의 인증하는 법을 공부했을 때, session library가 cookie에 저장되어 전달된다. 그러나, 모바일 앱일 경우에는 그런 인증 방식 못 쓴다. 이럴 때 쓰는 다른 웹 authentication 방식으로 JWT가 있다.
JWT

- RFC 7519 표준으로 정의된 방식
- JSON format을 Base 64로 encode해서 만든다
- payload에 담겨있는 것 = Claim (사용자에 대한 property)
- signature : 검증을 위해 필요 (header + payload 인코딩)
signature:
HMACSHA256 (
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
- secret: 서버만 가지고 있는 인증을 위한 비밀키
JWT 인증 절차
- username, password 인증시도
- 인증 확인 - DB 연동
- JWT 토큰 (서버가) 발급
- JWT를 response header에 담아 보냄
- Client는 JWT를 저장 (localStorage, cookie에)
- 다음 요청부터 저장된 JWT를 request header의 Authorization 값에 보냄
- 요청에 담긴 JWT (서버가) 검증
- 검증 성공 시, 인증 처리(session 기반 x, but 여기서 session이 생겨 인증정보 저장됨), 권한 부여
- 인증 후, 요청처리 (buisness logic), response (response 후 session 삭제)