실무 환경과 동일한 spring security +jwt 토큰 인증방식에 대해 제대로 알고싶어 인프런 강의 + 직접 실습한 내용을 기록하고자 한다.
학습한 강의와 실습 프로젝트는 아래와 같다.
- spring security와 jwt의 각 개념을 이해한다.
JWT는 Header, Payload, Signature 이 세가지로 이뤄져있으며, 각 부분은 Base64로 인코딩 되어 표현된다.
{
"alg": "HS256", // 알고리즘 방식 지정. HS256(SHA256) 또는 RSA
"typ": JWT // 토큰 타입 지정
}
Payload
시스템에서 실제로 사용될 정보. 토큰에서 사용할 정보의 조각들인 클레임(claim)이 담겨있다.클레임은 총 3가지로 나누어지며, Json(Key/Value) 형태로 다수의 정보를 넣을 수 있다.
Signature
토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.
서명(Signature)은 위에서 만든 헤더(Header)와 페이로드(Payload)의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.
즉, 토큰의 유효성 검증을 위한 문자열. ->서버에서는 이 문자열로 유효한 토큰인지 검증한다.
장점
중앙의 인증서버, 데이터 스토어에 대한 의존성 없음.
시스템 수평 확장 용이. base64 url safe encoding > url, cookie, headr 모두 사용가능.
단점
페이로드의 정보가 많아지면 네트워크 사용량 증가.
클라이언트에 저장 되므로 서버에서 조작하기 어려움.
https://frozenpond.tistory.com/94
https://spring.io/projects/spring-security
https://mangkyu.tistory.com/56 [MangKyu's Diary]
https://velog.io/@dnjscksdn98/Spring-Spring-Security%EB%9E%80
https://mangkyu.tistory.com/76