세션, 토큰과 관련된 이전 글에 이어서 사용자 인가 방식 중 가장 많이 사용되는 방법 중 하나인 JWT에 대하여 공부해보았다.
JWT란?
- JSON Web Token의 약자
- Header, Payload, Signature로 구성
- Base64로 인코딩
- Header에는 토큰의 종류와 암호와 알고리즘 등과 같은 토큰에 관한 정보가 담겨있음
- Payload에는 발행일, 만료일, 사용자 ID 등 사용자 검증에 필요한 정보가 들어있음
- Signature는 Base64로 인코딩된 Header와 Payload를 알고리즘으로 서명한 값이 들어있음. Server마다 서명하는 암호값이 다르기 때문에 이 값으로 토큰이 조작되었는지 알 수 있다.
아래 사이트에서 jwt를 경험해볼 수 있다.
Refresh Token & Access Token
- 두 토큰 모두 JWT 기반
- Access Token은 API 요청을 할 때 검증용으로 사용. 즉, 인증이 필요한 API를 사용할 때에는 Access Token을 사용
- Refresh Token은 Access Token을 추가로 발급받을 때 사용
- Access Token은 유효기간이 짧고, Refresh Token은 유효기간이 길다.
- 노출이 잦은 Access Token은 해커가 탈취를 하더라도 오랫동안 사용하는 것을 막기 위해 유효기간을 짧게 둔다.
- 노출이 적은 Refresh Token은 Access Token을 새로 발급 받는 경우에만 사용하기 때문에 탈취 가능성이 낮음
Token 발급 과정
1. 클라이언트에서 "userName:password" 형태의 값을 base64 형태로 인코딩 한 후 Header Authorization에 "Basic $token" 형태로 전송
-> ":"으로 userName과 password를 구분하기 때문에 userName과 password에는 ":"이 포함되어 있으면 안됨
2. 서버에서 토큰 검증
3. 클라이언트로 토큰 전송(Refresh + Access)
Refresh Token 사용 과정
1. Access Token이 만료되면 재발급 url로 Header Authorization에 "Bearer $refreshToken" 형태로 요청을 보냄
2. 서버에서 사용자 데이터를 검증
3. Access Token 생성 후 클라이언트로 전송
Access Token 사용 과정
1. API 요청 시, Header Authorization에 "Bearer $accessToken" 형태로 요청
2. 서버에서 토큰 검증
3. DB에서 데이터를 조회하여 클라이언트로 전송
일반적인 토큰 인증 로직
'CS' 카테고리의 다른 글
API에 대하여 (0) | 2023.06.22 |
---|---|
데이터 교환 형식 - JSON과 XML (0) | 2023.06.20 |
Token과 Session (0) | 2023.02.27 |