[JWT] JWT Token 정리
2021. 12. 14. 01:41ㆍSpring Boot/Information
JWT (Json Web Token)
- 다양하고 많은 프로그래밍 언어에서 지원하고 있다.(주류 언어는 대부분 지원)
- 자가 수용적인 특성을 지니고 있다.
→ 필요한 모든 정보를 자체적으로 지니고 있음
(기본정보 : 발급일자, 유효일자 등 / 전달정보 : 이를테면 로그인 정보 / 시그니쳐 : 검증을 위해 사용) - 쉽게 전달 가능하다.
→ Header로 전달 가능하고, Header에 넣어 OAuth 적용이 가능함.
QueryParams로도 넘길 수 있으나, 보안상 대부분 Header에 넣어 넘기고 있음.
언제 쓸까?
- 주로 로그인시, 보안이 중요한 데이터를 주고 받을 때 사용함.
(예: 유저가 로그인 진행 → 서버에서 유저 정보를 기반으로 JWT Token 발급 → 유저가 서버 요청시 Token을 전달 → 서버에서 Token이 유효한지 Validation Check 및 요청한 작업에 권한이 있는지 확인 → 모두 통과되면 요청한 작업에 대해 처리)
왜 쓸까?
- 서버에서 Session을 유지할 필요가 없음.
→ 즉, Token을 검증하고 Payload를 해석하면 사용자가 누구인지를 알 수 있기 때문에 서버 Cost를 줄일 수 있음.
생김새
aaaaaa.bbbbbb.cccccc
- aaaaaa : Header 정보
→ type, alg로 이루어진 객체를 갖고 있음.
{ type : JWT, alg : Hash algorithm } - bbbbbb : Payload
→ 등록된 클레임, 공개 클레임, 비공개 클레임으로 이루어져 있음.
등록된 클레임 : 발급자(issuer), 제목(subject), 대상자(audience), 유효기간(expiraton), 활성날짜(nbf), 생성일짜(iat), 고유식별번호(jti)
공개 클레임 : 충돌이 방지된 이름을 지정. URI 형식으로 지정함.
비공개 클레임 : FE ↔ BE 상호 협의된 정보를 담고 있음. 이를테면 userId와 같은 정보 - cccccc : Signature
→ 위 2개의 정보를 각자 base64로 Encoding한 후 구분자로 "." 을 붙이고 난 뒤 나온 문자열을 alg에 쓰인 알고리즘으로 암호화 진행 후 base64로 변환된 값
위 3개의 파트를 이어 붙이면 JWT 토큰이 된다.
JWT를 깊게 쓴건 아니라서 정확히 사용하고 있는지를 모르겠다.
참고문서)
'Spring Boot > Information' 카테고리의 다른 글
[GraphQL] Spring Boot로 Graph QL 적용하기 (2) (0) | 2021.12.20 |
---|---|
[GraphQL] Spring Boot로 Graph QL 적용하기 (1) (0) | 2021.12.19 |
[Spring Boot] REST API 구축시 Local Date Time 받기 (0) | 2021.11.10 |
[build.gradle.kts] Spring Build 파일 실행시 ReactJS도 같이 실행하는 방법(3) (0) | 2021.11.08 |
[Spring Boot] Kotlin + Gradle MyBatis 연동 (0) | 2021.11.02 |