✅ 맞습니다! OAuth 2.0에서는 "인가 코드 그랜트 타입"과 "클라이언트 크레덴셜 그랜트 타입"이 존재하지만, 동작 방식과 목적이 다릅니다.
1. 인가 코드 그랜트 타입 (Authorization Code Grant Type)
목적: 사용자가 개입하는 방식으로, 사용자 인증과 권한 부여를 위해 사용됩니다.
- 사용 사례: 사용자 인증이 필요하고, 클라이언트가 사용자의 권한으로 API를 호출할 때 사용
동작 흐름
- 클라이언트가 사용자를 Authorization Server로 리다이렉트합니다.
- 사용자는 로그인 및 권한 부여를 수행합니다.
- Authorization Server는 인가 코드를 발급하고 클라이언트로 리다이렉트합니다.
- 클라이언트는 인가 코드를 받아 서버에 전달해 Access Token을 요청합니다.
- Authorization Server가 유효한 코드로 확인되면 Access Token을 발급합니다.
요청 예시
GET /authorize?response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https://yourapp.com/callback&
scope=read&
state=random-string
특징
- 사용자 개입이 필수
- 보안 강화: Access Token이 직접 노출되지 않음 (인가 코드 교환을 통해 발급)
- 웹 애플리케이션, 모바일 앱 등에서 주로 사용됨
2. 클라이언트 크레덴셜 그랜트 타입 (Client Credentials Grant Type)
목적: 사용자 개입 없이 클라이언트 애플리케이션이 자체적으로 인증할 때 사용됩니다.
- 사용 사례: 서버 간의 통신, 백엔드 서비스가 자체 권한으로 API 호출
동작 흐름
- 클라이언트가 클라이언트 ID와 클라이언트 시크릿을 사용해 Authorization Server에 토큰 발급 요청을 보냅니다.
- Authorization Server는 클라이언트를 검증한 후 Access Token을 발급합니다.
요청 예시
POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET
특징
- 사용자 개입 없음
- 클라이언트가 자체 권한으로 API를 호출 (사용자 정보 불필요)
- 보안 주의: 클라이언트 시크릿이 노출되지 않도록 해야 함
주요 차이점 요약
특징 | 인가 코드 그랜트 | 클라이언트 크레덴셜 그랜트 |
---|---|---|
사용자 개입 | 필요 (사용자 로그인 및 권한 부여) | 불필요 (클라이언트 자체 인증) |
용도 | 사용자 기반 애플리케이션 (웹, 모바일) | 서버 간 통신, 백엔드 서비스 호출 |
보안 | 인가 코드를 통해 Access Token 발급 | 클라이언트 시크릿 기반으로 발급 |
Access Token 발급 주체 | 사용자 인증 후 발급 | 클라이언트가 자체적으로 요청 |
정리
- 인가 코드 그랜트 타입: 사용자 인증이 필요할 때 사용. (웹, 모바일 앱에 주로 사용)
- 클라이언트 크레덴셜 그랜트 타입: 사용자 개입 없이, 서버 간 통신에 사용.
'OAuth' 카테고리의 다른 글
OpenID Connect (OIDC) (1) | 2024.12.18 |
---|---|
/.well-known/openid-configuration (0) | 2024.12.18 |
Client Credentials Grant Type (0) | 2024.12.18 |
OAuth 2.0 액세스 토큰 발급 방법 (0) | 2024.12.17 |
Spring Authorization Server 구성 (0) | 2024.12.17 |