OAuth 2.0 클라이언트 자격 증명
OAuth 2.0 클라이언트 자격 증명 (Client Credentials Grant)
Client Credentials grant type은 별도의 인가(사용자 동의) 단계 없이 클라이언트가 액세스 토큰을 얻기 위해 쓰는 방식이에요. 클라이언트 자격 증명 자체가 리소스에 접근할 권한이 된다는 특징이 있어요.
주로 클라이언트가 '자기 자신의 리소스'에 접근할 때 사용해요. 사용자의 리소스가 아니라요. 즉 M2M(machine-to-machine) 통신에서 서비스 간 인증으로 자연스럽게 어울려요.
동작 방식
POST /token
grant_type=client_credentials
client_id=...
client_secret=...
- 클라이언트가
grant_type=client_credentials로 자신의 자격 증명(client_id/client_secret)을 토큰 엔드포인트에 보내요. - 인가 서버가 자격 증명을 검증하고 액세스 토큰을 발급해요.
- 클라이언트는 이 토큰으로 보호된 리소스에 접근해요.
이 흐름에는 사용자가 관여하지 않아요. 그래서 '사용자 대신'이 아니라 '클라이언트 자신을 대신해' 토큰이 발급돼요.
언제 쓰나요
- 백엔드 서비스 간 API 호출
- 배치 잡, 크론 태스크
- 사용자 컨텍스트가 필요 없는 서비스 계정 형태의 접근
- 시스템 통합에서 안전하게 API 키를 토큰으로 교환하는 용도
사용자별 권한이 필요한 경우라면 이 그랜트는 부적절해요. 이때는 Authorization Code flow처럼 사용자를 인증하는 방식을 써야 해요.
주의점
client_secret이 유출되지 않게 서버 측에서만 보관해야 해요. 브라우저에 노출되면 안 돼요.- 클라이언트 자격 증명으로 발급된 토큰은 사용자 식별이 아니므로, 감사·추적 관점에서 스코프를 최소화해요.