OAuth / / 2024. 12. 18. 10:15

Client Credentials Grant Type

Client Credentials Grant Type은 OAuth 2.0의 인증 방식 중 하나로, 클라이언트 애플리케이션이 자체적으로 인증하고 액세스 토큰을 발급받는 방식입니다.

이 방식은 사용자 개입 없이 클라이언트 자체가 인증 주체가 되는 경우에 사용됩니다.


1. 사용 사례

  • 서버 간 통신: 사용자 정보가 필요 없는, 백엔드 서비스 간의 통신
  • API 접근: 클라이언트가 자체 권한으로 API를 호출할 때
  • 비즈니스 로직: 특정 작업을 수행하기 위한 클라이언트 자체 인증

예를 들어 마이크로서비스 환경에서 서비스 A가 서비스 B의 API를 호출할 때 사용자 대신 서비스 자체를 인증하는 경우 사용됩니다.


2. 흐름 (Flow)

다음은 Client Credentials Grant Type의 단계적 흐름입니다:

  1. 클라이언트 인증 요청

    • 클라이언트 애플리케이션은 클라이언트 ID클라이언트 시크릿을 사용하여 인증 서버에 요청합니다.

    • 요청 형식은 다음과 같습니다:

      POST /token HTTP/1.1
      Host: authorization-server.com
      Content-Type: application/x-www-form-urlencoded
      
      grant_type=client_credentials&
      client_id=CLIENT_ID&
      client_secret=CLIENT_SECRET
  2. 액세스 토큰 발급

    • 인증 서버는 클라이언트를 검증한 후 액세스 토큰을 발급합니다:
      {
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
        "token_type": "Bearer",
        "expires_in": 3600
      }
  3. API 접근

    • 클라이언트는 발급받은 액세스 토큰을 사용하여 API 서버에 접근합니다:
      GET /resource HTTP/1.1
      Host: resource-server.com
      Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  4. 리소스 제공

    • API 서버는 액세스 토큰을 검증한 후 요청된 리소스를 제공합니다.

3. 특징

  • 사용자 인증 없음: 사용자가 개입하지 않고 클라이언트만 인증됩니다.
  • 클라이언트 신뢰: 클라이언트는 반드시 인증 서버에 등록된 클라이언트 ID클라이언트 시크릿을 소유해야 합니다.
  • 보안 주의: 클라이언트 시크릿이 노출되지 않도록 주의해야 합니다.

4. 언제 사용해야 할까?

  • 서비스 간 비즈니스 로직 수행
    예: 백엔드 서버가 데이터 처리 또는 다른 서비스와 통신할 때
  • 보안이 필요한 서버 간 API 호출
    예: 애플리케이션이 API 키 없이 안전하게 인증 서버와 통신할 때

5. 장단점

장점

  • 사용자 인증이 필요 없으므로 간단하게 사용 가능
  • 서버 간 통신에 적합

단점

  • 클라이언트 시크릿이 노출되면 보안 위협 발생
  • 사용자 정보 기반의 세밀한 권한 부여는 불가능

6. 요약

Client Credentials Grant Type사용자가 개입하지 않고, 클라이언트가 직접 인증 서버에 인증 요청을 보내 액세스 토큰을 발급받아 리소스에 접근하는 방식입니다.
서버 간 통신 또는 클라이언트가 자체 권한으로 API 호출할 때 주로 사용됩니다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유