본문 바로가기

CS/Flutter | Dart

Session, Token, JWT, Access Token, Refresh Token

Session

유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구

 

- 세션은 특수한 ID값으로 이루어져 있다

- 세션은 서버에서 생성되며, 클라이언트에서 쿠키를 통해 저장된다

- 클라이언트에서 요청을 보낼 때 세션 ID를 같이 보내면 현재 요청하는 사용자가 누구인지 서버에서 알 수 있다

  (요청할 때마다 아이디와 비밀번호 물어볼 필요 없다)

- 서버에 데이터베이스가 저장되기 때문에 클라이언트에 사용자 정보를 노출할 위험이 없다

 

Session 단점

- 세션 ID는 데이터베이스에 저장되기 때문에 요청 있을 때마다 데이터베이스를 확인해야 한다

- 데이터베이스에 세션을 저장해야 하기 때문에 Horizontal Scaling이 어렵다

 

 

 

Token

유저의 정보를 Base64로 인코딩된 String 값에 저장하는 도구

 

- 토큰은 Header, Payload, Signature로 구성되어 있으며, Base64로 인코딩되어 있다

- 토큰은 서버에서 생성되며 클라이언트에서 저장된다

- 클라이언트에서 요청을 보낼 때 토큰ID를 같이 보내면 요청 보내는 사용자가 누구인지 알 수 있다

  (요청할 때마다 아이디와 비밀번호 물어볼 필요 없다)

- 토큰은 데이터베이스에 저장되지 않고 시그니처를 통해 검증할 수 있다

  (검증할 때마다 데이터베이스를 들여다 볼 필요 없다)

- 데이터베이스에 토큰을 저장하지 않기 때문에 Horizontal Scaling이 쉽다

 

Token 단점

- 정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다

 

 

 

JWT(Json Web Token)

- Header, Payload, Signature로 구성되어 있으며, Base64로 인코딩되어 있다

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

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

- Signature에는 Base64로 인코딩된 Header와 Payload를 알고리즘으로 sign한 값이 들어있다

  이 값을 통해 토큰이 발급된 후로 조작이 있었는지 알 수 있다

 

 

 

Access Token, Refresh Token

- 두 토큰 모두 JWT 기반이다
- AccessToken은 API 요청을 할 때 검증용 토큰으로 사용된다

  인증이 필요한 API를 사용할 때는 꼭 AccessToken을 Header에 넣어서 보내야한다
  예) 유저 정보 수정, 회사 채용공고 지원 인원 확인 등
- Refresh Token은 AccessToken을 추가로 발급할 때 사용된다

  Access Token을 새로고침(Refresh)하는 기능이 있기 때문에 Refresh Token이라고 부른다
- AccessToken은 유효기간이 짧고 Refresh Token은 유효기간이 길다
- 자주 노출되는 AccessToken은 유효기간을 짧게 해서 Token이 탈취돼도 해커가 오래 사용하지 못하도록 방지할 수 있다
- 상대적으로 노출이 적은 Refresh Token은 Access Token을 새로 발급 받을 때만 사용되기 때문에 탈취 가능성이 적다

 

 

 

 

'CS > Flutter | Dart' 카테고리의 다른 글

Pagination  (0) 2023.09.16
Tab bar, DefaultTabController, Bottom Navigation Bar  (0) 2023.09.11
미세먼지 측정 앱 #2 - Hive  (19) 2023.09.07
SQL, NoSQL, Hive  (7) 2023.08.31
HTTP, REST API, RESTful API  (2) 2023.08.29

Tiny Star