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 |