OAuth 2.0 토큰 검증

OAuth 2.0 토큰 검증 (Token Introspection)

Token Introspection 확장(RFC 7662)은 리소스 서버가 액세스 토큰에 대한 정보를 얻을 수 있게 해 주는 메커니즘이에요. 이 스펙을 쓰면 리소스 서버는 액세스 토큰의 유효성을 확인하고, 어떤 사용자·어떤 스코프와 연관돼 있는지 같은 추가 정보도 알아낼 수 있어요.

액세스 토큰을 자체적으로 검증하기 어려운 opaque 토큰(불투명 토큰)일 때 주로 유용해요. 인가 서버에 질의해서 토큰의 상태를 확인하는 식이에요.

출처: https://oauth.net/2/token-introspection/

동작 방식

리소스 서버는 인가 서버의 인트로스펙션 엔드포인트에 토큰을 보내요.

POST /introspect
token=<access_token>
token_type_hint=access_token|refresh_token

인가 서버는 JSON 응답으로 토큰의 상태를 돌려줘요. 응답에는 active 필드가 가장 중요하고, active=true면 토큰이 유효하다는 뜻이에요.

{
  "active": true,
  "client_id": "my-client",
  "username": "[email protected]",
  "scope": "read write",
  "exp": 1710000000,
  "iss": "https://auth.example.com",
  "sub": "user-123"
}
  • active — 토큰이 현재 유효하고 폐기되지 않았는지. 필수.
  • scope — 토큰에 부여된 스코프.
  • client_id, username, sub — 토큰과 연관된 식별자들.
  • iss, exp, iat — 발행자·만료·발행 시각(존재 시).

언제 쓰나요

  • opaque 토큰을 쓰는 인가 서버에서 리소스 서버가 토큰을 직접 파싱할 수 없을 때
  • 토큰의 유효성뿐 아니라 어떤 권한(scope)이 있는지 세밀하게 확인해야 할 때
  • 액세스 토큰이 폐기·만료됐는지 서버 측 상태를 확인해야 할 때

주의점

  • 인트로스펙션 요청 자체가 클라이언트 인증을 요구할 수 있어요.
  • 엔드포인트는 HTTPS로 보호하고, 응답은 토큰 내용을 로그에 남기지 않도록 주의해요.
  • 응답의 active=false면 어떤 민감 정보도 신뢰하지 말고 접근을 거부해요.

더 알아보기