2024. 4. 22. 19:47ㆍ개발
JWT 이란?
JWT(JSON Web Token)는 클라이언트(사용자)와 서버 간에 정보를 JSON 개체로 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. SAML (Security Assertion Markup Language Token) 보다 크기가 작아 더 컴팩트하게 사용할 수 있습니다. JWT는 JSON 개체에 기본정보, 전달할 정보, 검증 정보를 모두 담고 있습니다. 또한, JWT는 전자 서명이 되어있기 때문에 검증 과정을 거쳐 확인하고 신뢰할 수 있으며 Secret Key 또는 Public/Private Key Pair를 사용하여 서명할 수 있습니다.
JWT는 3가지 구성 요소(Header, Payload, Signature)로 이루어져 있으며, 각 구성 요소들은 dot(.)으로 구분이 되어 있습니다.
- 프로젝트에서 JWT
내가 이제까지 해왔던 프로젝트에서는 JWT 만을 사용하여 유효기간을 설정해 놓고 만료되면 자동 로그아웃이 되었고 다시 사용자가 로그인을 하여 토큰을 발행 했어야 했다.
하지만 유효기간을 너무 짧게 두면 사용자는 지속적으로 로그인을 해야 하고 그렇다고 너무 길게 두면 보안상의 이유로 좋지 않다는 글을 보게 되어 이번 myworld 프로젝트에 적용시켜 보기로 하여 관련 문서를 좀 뒤져봤다.
https://datatracker.ietf.org/doc/html/rfc6749
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
이런 그림 위에 영어로 과정이 써저 있는 거 같아 해석해 보니 내용은 이렇다.
A) 클라이언트가 서버에 인증을 요청하는 과정인거 같다.
B) 서버에서 사용자 확인후 유효하다면 액세스 토큰과 리프레쉬 토큰을 발급한다.
C) 클라이언트가 리소스 서버에 접근할때 발급된 토큰을 제시한다.
-> Resource Server : 클라이언트가 접근하려는 데이터나 서비스의 실제 정보를 가지고 있는 서버
-> Authorization Server : 클라이언트의 신원을 파악하고, 요청한 작업에 대한 권한을 부여하는 서버
D) 리소스 서버는 토큰을 검증하고 유효하다면 요청을 들어준다.
E) F) 토큰이 만료된다.
G) 토큰이 만료되면 클라이언트는 기존에 발급된 리프레쉬 토큰으로 Authorization server에 액세스 토큰 발급을 다시 요청한다.
H) 서버는 리프레쉬 토큰을 검증하고, 유효하다면 새로은 액세스 토큰을 발급 (선택적 리프레쉬 토큰 발급)
리프레쉬 토큰을 사용하면 좋은점
보안 강화 : 제한된 유효기간을 가지고 있어 토큰이 유출될 경우 장기간 악용될 가능성을 줄일 수 있음
사용자 편의성 : 사용자가 반복적으로 로그인을 할 필요 없어, 사용자 경험을 향상시킬 수 있음
성능 최적화 : 인증 서버에 접근 토큰을 새로 발급받기 위한 추가적인 인증 과정을 줄일 수 있다.
'개발' 카테고리의 다른 글
| 컴퓨터 시스템 1주차 (0) | 2025.03.24 |
|---|---|
| 정글에서 0주차(정글 익명 게시판 토이 프로젝트) (1) | 2025.03.15 |
| 사이드 프로젝트 - 미스테리 스케치 (0) | 2024.03.11 |
| 다이노즈 (육아크루) 에서의 4주 (1) | 2024.01.05 |
| 육아크루에서 2주차(2) (1) | 2023.12.27 |