본문 바로가기

CS

Token과 JWT

세션, 토큰과 관련된 이전 글에 이어서 사용자 인가 방식 중 가장 많이 사용되는 방법 중 하나인 JWT에 대하여 공부해보았다. 

JWT란?

- JSON Web Token의 약자

- Header, Payload, Signature로 구성

- Base64로 인코딩

- Header에는 토큰의 종류와 암호와 알고리즘 등과 같은 토큰에 관한 정보가 담겨있음

- Payload에는 발행일, 만료일, 사용자 ID 등 사용자 검증에 필요한 정보가 들어있음

- Signature는 Base64로 인코딩된 Header와 Payload를 알고리즘으로 서명한 값이 들어있음. Server마다 서명하는 암호값이 다르기 때문에 이 값으로 토큰이 조작되었는지 알 수 있다.

 

아래 사이트에서 jwt를 경험해볼 수 있다.

 

https://jwt.io/

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

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에서 데이터를 조회하여 클라이언트로 전송

일반적인 토큰 인증 로직

Refresh Token 사용과정과 AccessToken 사용과정을 합한 형태가 나옴

 

'CS' 카테고리의 다른 글

API에 대하여  (0) 2023.06.22
데이터 교환 형식 - JSON과 XML  (0) 2023.06.20
Token과 Session  (0) 2023.02.27