오늘 뭐했냐/개발에 대한 주저리

23.08.13 Access token과 Refresh token

스스로에게 2023. 8. 19. 22:39

Access token과 Refresh token은 주로 OAuth 2.0과 같은 인증 프로토콜에서 사용되며, 사용자의 세션 상태를 유지하면서 보안성을 높이기 위한 목적으로 사용됩니다.

로컬 인증

  1. 사용자는 자신의 자격 증명(예: ID와 비밀번호)으로 인증을 요청합니다.
  2. 인증 서버는 사용자의 자격 증명을 검증하고, 검증이 성공하면 Access Token과 Refresh Token을 발급합니다.
  3. 이 두 토큰은 클라이언트에 반환되며, 클라이언트는 적절하게 저장하여 사용합니다.

외부 인증 

  1. 사용자가 어플리케이션에 로그인을 시도합니다.
  2. 어플리케이션은 사용자를 OAuth2 제공자(ex. Google, Facebook)로 리다이렉트합니다.
  3. 사용자가 로그인 후, 해당 제공자로부터 어플리케이션에 접근할 권한을 부여받습니다.
  4. 제공자는 어플리케이션에게 Authorization Code를 제공합니다.
  5. 어플리케이션은 이 코드를 사용하여 Access token과 Refresh token을 요청합니다.
  6. 제공자는 해당 토큰들을 어플리케이션에게 반환합니다.

구분

  • Access Token: 사용자가 성공적으로 로그인하면 인증 서버에서 일정 시간동안 유효한 Access token을 발급합니다. 이 토큰은 보통 짧은 유효 시간을 가지며, 사용자가 리소스 서버에 요청을 할 때 이 토큰을 헤더나 본문에 포함시켜 인증 정보를 제공합니다.
  • Refresh Token: Access token과 함께 발급되며, Access token이 만료되었을 때 새로운 Access token을 요청하기 위해 사용됩니다. Refresh token은 일반적으로 Access token보다 긴 유효 시간을 가집니다.

사용 방법:

  1. 클라이언트는 Access Token을 사용하여 보호된 리소스에 접근합니다.
  2. Access Token이 만료될 경우, Refresh Token을 사용하여 새 Access Token을 요청합니다.
  3. 인증 서버는 Refresh Token을 검증하고, 유효하면 새로운 Access Token을 발급합니다.
  4. 클라이언트는 새로운 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