JWT 토큰, Refresh 토큰, Access 토큰

휘Bin·2023년 7월 20일
0
post-thumbnail

JWT

  • Json Web Token의 약자

  • Header, Payload, Signature로 이루어져 있다.

  • Base64로 인코딩 됨(Binary to Text)

  • Header는 토큰의 종류와 암호화 알고리즘 등 토큰에 대한 정보가 들어있다.

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

  • Signature는 Base64 인코딩 된 Header와 Payload를 알고리즘으로 싸인한 값이 들어있다. 이 값을 기반으로 토큰이 발급된 뒤로 조작되었는지 확인 가능

  • . 2개로 나뉘게 된다. 무조건 .(점)이 2개 있음

  • JWT를 JSON으로 Decoding을 하면 3개의 부분으로 나뉘게 됨. 우리가 읽을 수 있게.

  • Header, payload를 조금이라도 건드리면 Signature가 깨지게 됨. 조작 여부를 알 수 있음

  • Signaure의 Secret값이 정확히 일치해야지만 JWT가 위조나 변조되지 않았다고 확신할 수 있음.

  • 따라서 데이터베이스를 따로 볼 필요없이, 토큰 안에 정보를 집어넣어놔도 Signature만 검증할 수 있다면 신뢰할 수 있는 것

Refresh Token, Access Token

  • 두 토큰 모두 JWT 기반

  • Access Token은 API 요청을 할 때 검증용 토큰으로 사용. 즉, 인증이 필요한 API를 사용할 때는 꼭 Access Token을 Header에 넣어서 보내야 한다.
    => ex) 유저 정보 수정, 회사 채용공고 지원 인원 확인 등등

  • Refresh Token은 Access Token을 추가로 발급할 때 사용. Access Token을 새로고침(Refresh)하는 기능이 있기 때문에 Refresh Token이라 부른다.

  • Access Token은 유효기간이 짧고 Refresh Token은 유효기간이 길다.

  • 자주 노출되는 Access Token은 유효기간을 짧게해서 Token이 탈취돼도 해커가 오래 사용하지 못하게 방지할 수 있다.

  • 상대적으로 노출이 적은 Refresh Token의 경우 Access Token을 새로 발급받을 때만 사용되기 때문에 탈취 가능성은 적다.

토큰 발급 과정

  1. [Client -> API Server] ID/Pass 전송
    => "username:password" 값을 base64 인코딩 후 authorization 헤더에 "Basic $token" 형태로 전송

  2. [API Server] Token 검증

  3. [API Server -> Client] 토큰 전송(Refresh + Access)

Refresh Token 사용 과정

  1. [Client -> API Server] Access Token 재발급 URL로 요청
    => [Header]
    authorization: "Bearer $refreshToken"

  2. [API Server] Refresh Toekn 검증

  3. [API Server] Access Token 재발급

  4. [API Server -> Client] 토큰 전송(Access)

Access Token 사용 과정

  1. [Client -> API Server] API 요청
    => [Header]
    authorization: "Bearer $accessToken"

  2. [API Server] Access 토큰 검증

  3. [API Server -> Database] 데이터 요청

  4. [Database -> API Server] 데이터 응답

  5. [API Server -> Client]데이터 응답

일반적인 토큰 인증 로직

  1. [Client -> API Server] API 요청

  2. [API Server] Access 토큰 검증

  3. [API Server -> Client] Access Token 기간 만료 응답(401)

  4. [Client -> API Server] Access Token 재발급 URL로 요청

  5. [API Server] Refresh 토큰 검증

  6. [API Server -> Client] Access Token 응답

  7. [Client -> API Server] 새로운 Access Token으로 재요청

  8. [API Server -> Database] 데이터 요청

  9. [Database -> API Server] 데이터 응답

  10. [API Server -> Client] 데이터 응답

※ 만약 Refresh 토큰도 만료되었다면 다시 로그인하게 하는 것이 정석

profile
One-step, one-step, steadily growing developer

0개의 댓글

관련 채용 정보