Access token과 Refresh token은 주로 OAuth 2.0과 같은 인증 프로토콜에서 사용되며, 사용자의 세션 상태를 유지하면서 보안성을 높이기 위한 목적으로 사용됩니다.
로컬 인증
- 사용자는 자신의 자격 증명(예: ID와 비밀번호)으로 인증을 요청합니다.
- 인증 서버는 사용자의 자격 증명을 검증하고, 검증이 성공하면 Access Token과 Refresh Token을 발급합니다.
- 이 두 토큰은 클라이언트에 반환되며, 클라이언트는 적절하게 저장하여 사용합니다.
외부 인증
- 사용자가 어플리케이션에 로그인을 시도합니다.
- 어플리케이션은 사용자를 OAuth2 제공자(ex. Google, Facebook)로 리다이렉트합니다.
- 사용자가 로그인 후, 해당 제공자로부터 어플리케이션에 접근할 권한을 부여받습니다.
- 제공자는 어플리케이션에게 Authorization Code를 제공합니다.
- 어플리케이션은 이 코드를 사용하여 Access token과 Refresh token을 요청합니다.
- 제공자는 해당 토큰들을 어플리케이션에게 반환합니다.
구분
- Access Token: 사용자가 성공적으로 로그인하면 인증 서버에서 일정 시간동안 유효한 Access token을 발급합니다. 이 토큰은 보통 짧은 유효 시간을 가지며, 사용자가 리소스 서버에 요청을 할 때 이 토큰을 헤더나 본문에 포함시켜 인증 정보를 제공합니다.
- Refresh Token: Access token과 함께 발급되며, Access token이 만료되었을 때 새로운 Access token을 요청하기 위해 사용됩니다. Refresh token은 일반적으로 Access token보다 긴 유효 시간을 가집니다.
사용 방법:
- 클라이언트는 Access Token을 사용하여 보호된 리소스에 접근합니다.
- Access Token이 만료될 경우, Refresh Token을 사용하여 새 Access Token을 요청합니다.
- 인증 서버는 Refresh Token을 검증하고, 유효하면 새로운 Access Token을 발급합니다.
- 클라이언트는 새로운 Access Token을 저장하고 사용합니다.
토큰 기반 인증의 장점:
- 상태가 없음 (Stateless): 토큰은 클라이언트 측에서 정보를 저장하므로, 서버 측에서 별도의 세션을 유지할 필요가 없습니다. 이로 인해 확장성이 높아집니다.
- 분산 시스템에서의 사용 용이: 여러 서버간에 토큰을 공유할 수 있어서, 여러 서버 또는 서비스에서도 인증이 용이합니다.
- 다양한 플랫폼 호환성: 웹, 모바일, IoT 등 다양한 환경에서 토큰 기반 인증을 사용할 수 있습니다.
토큰 기반 인증의 단점:
- 크기: 토큰은 인코딩된 정보를 포함하므로, 세션 ID에 비해 크기가 클 수 있습니다.
- 보안 문제: 토큰이 탈취되면 그 토큰의 만료 시간까지 유효하므로, 토큰을 안전하게 전송하고 저장하는 것이 중요합니다.
- 취소의 어려움: 토큰을 일단 발급하면 그 토큰의 만료 시간까지 유효합니다. 세션과 달리 서버 측에서 강제로 토큰을 무효화하는 것이 어렵습니다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.08.15 아키텍쳐 설계 (0) | 2023.08.22 |
---|---|
23.08.14 passport.js (0) | 2023.08.21 |
23.08.12 객체 지향 프로그래밍 (OOP) (0) | 2023.08.16 |
23.08.11 DI와 IoC (0) | 2023.08.15 |
23.08.09 HTTP와 HTTPS (0) | 2023.08.13 |