OAuth Grant Type란?
OAuth Grant Type란?
OAuth 2.0의 Grant Type(권한 부여 유형)은 클라이언트가 인증 서버로부터 액세스 토큰을 받기 위해 사용하는 인증 및 권한 위임 방식입니다. 각각의 Grant Type은 다양한 환경(웹, 모바일, 서버 등)과 보안 요구사항에 맞춰 설계되어 있으며, 각 방식마다 인증 절차와 필요한 정보가 다릅니다123.
주요 OAuth 2.0 Grant Type 종류
Grant Type | 특징 및 사용 환경 | 주요 용도 |
---|---|---|
Authorization Code | 서버사이드(웹) 애플리케이션, 가장 안전 | 사용자가 브라우저에서 인증 후, 클라이언트가 받은 코드를 서버에서 토큰으로 교환245 |
PKCE (Proof Key for Code Exchange) | 모바일/SPA 등 공개 클라이언트, Authorization Code 보안 강화 | 코드 탈취 방지, 추가 검증값(code verifier/challenge) 사용24 |
Implicit (Deprecated) | SPA, 모바일 등 클라이언트 사이드 | 토큰을 브라우저로 직접 반환, 보안 취약해 OAuth 2.1에서 폐기 예정245 |
Resource Owner Password Credentials (Deprecated) | 신뢰할 수 있는 앱(내부), 보안 취약 | 사용자의 ID/PW를 직접 받아 토큰 발급, 외부 앱에는 권장하지 않음24 |
Client Credentials | 서버 간 통신, 사용자 개입 없음 | 클라이언트의 ID/Secret만으로 토큰 발급, 서버-서버, 데몬 등245 |
Device Code | 입력장치 제한된 디바이스(스마트TV 등) | 별도 기기에서 인증 후 디바이스에 토큰 발급5 |
Refresh Token | Access Token 재발급 | Access Token 만료 시 재인증 없이 새 토큰 발급, Authorization Code/Password 방식에서 주로 사용24 |
각 Grant Type의 간단 설명
1. Authorization Code Grant
- 서버사이드 웹앱에서 가장 널리 사용.
- 사용자가 인증/승인하면 인가 코드(authorization code)를 받고, 이 코드를 서버에서 access token으로 교환.
- 보안성이 높아 표준 방식으로 권장됨245.
2. PKCE-enhanced Authorization Code Grant
- Authorization Code 방식에 PKCE를 더해 보안 강화.
- 모바일, SPA 등 공개 클라이언트에서 코드 탈취 방지 목적.
- code_challenge와 code_verifier를 이용해 인증 과정에 추가 검증을 함24.
3. Implicit Grant (폐기 예정)
4. Resource Owner Password Credentials Grant (폐기 예정)
5. Client Credentials Grant
6. Device Code Grant
- 입력 기능이 제한된 디바이스(예: 스마트TV)에서 사용.
- 사용자는 별도의 기기(예: 스마트폰)에서 인증을 완료하고, 디바이스는 토큰을 발급받음5.
7. Refresh Token Grant
- access token이 만료됐을 때 refresh token으로 새로운 access token을 재발급.
- Authorization Code, Resource Owner Password 방식에서 주로 사용24.
용어 정리
- client_id, client_secret: 클라이언트(앱) 식별 및 인증 정보
- redirect_uri: 인증 완료 후 사용자를 돌려보낼 주소
- scope: 접근 권한 범위 지정
- state: CSRF 방지용 임의 문자열
- grant_type: 사용 중인 권한 부여 유형 명시(authorization_code, client_credentials 등)4
요약
OAuth Grant Type은 다양한 환경과 보안 요구에 맞춰 인증 및 권한 위임을 표준화한 방식입니다. 각 방식은 사용 목적과 보안 수준, 구현 환경에 따라 선택되며, 최신 표준에서는 보안 취약점이 있는 방식은 점차 폐기되고 있습니다2451.