OAuth 2.0 암시적 그랜트

OAuth 2.0 암시적 그랜트 (Implicit Grant)

Implicit flow는 예전에 네이티브 앱과 JavaScript 앱을 위해 권장되던 단순화된 OAuth 흐름이에요. 액세스 토큰을 별도의 인증 코드 교환 단계 없이 즉시 돌려받는 방식이었죠. 지금은 보안상 문제로 더 이상 권장하지 않아요.

액세스 토큰이 클라이언트가 받았는지 확인 없이 HTTP 리다이렉트로 그대로 반환되는 근본적인 위험 때문에, 일부 서버는 이 흐름을 아예 금지하기도 해요. 공개 클라이언트(네이티브 앱, JS 앱)는 대신 인가 코드 흐름에 PKCE 확장을 쓰는 게 올바른 선택이에요.

출처: https://oauth.net/2/grant-types/implicit/

동작 방식

Implicit flow는 토큰이 리다이렉트 URI의 fragment에 실려 바로 돌아온다는 점이 특징이에요.

  1. 클라이언트가 사용자를 인가 서버(authorization server)의 인가 엔드포인트로 보내요.
  2. 사용자가 로그인·동의하면 인가 서버가 access_token을 리다이렉트 URI에 담아 돌려줘요.
  3. 클라이언트(주로 브라우저의 JS)가 fragment에서 토큰을 읽어 사용해요.

왜 권장하지 않나요

  • 액세스 토큰이 리다이렉트 URL에 노출되고, 히스토리·리퍼러·로그에 남을 수 있어요.
  • 토큰을 받았다는 확인(client confirmation) 없이 발급돼요.
  • 리소스 서버가 토큰을 검증하기 어렵고, 토큰이 더 오래 유효하게 되기 쉬워요.
  • OAuth 2.0 보안 모범 사례(Security Best Current Practice) 문서는 이 흐름을 완전히 금지하도록 권고해요.

무엇을 대신 쓸까요

  • 공개 클라이언트(SPA, 모바일) → 인가 코드 흐름 + PKCE
  • OAuth 2.0 for Browser-Based Apps 문서는 PKCE를 곁들인 인가 코드 흐름을 쓰는 기법을 설명해요.

결론적으로 새로 구축하는 시스템은 Implicit 대신 Authorization Code + PKCE를 쓰는 게 표준이에요.

더 알아보기