10 April 2026
OAuth2 그랜트 유형과 구현
by Yang Taehwan
OAuth2에서 자주 등장하는 역할
- Resource Owner: 사용자
- Client: 토큰을 받아 API를 호출하려는 앱
- Authorization Server: 로그인/동의를 받고 토큰을 발급하는 서버
- Resource Server: access token을 받아 보호된 리소스를 제공하는 API 서버
Authorization Code Grant
- 클라이언트가 사용자를 인증 서버 로그인 페이지로 리다이렉트
- 사용자가 로그인하고 동의
- 인증 서버가 클라이언트에게 authorization code 전달
- 클라이언트가 그 code를 토큰 엔드포인트에 보내서 access token 획득
- 필요하면 refresh token도 함께 받음.
Client Credentials Grant
- Server to Server
- 클라이언트가 자신의 client_id, client_secret 같은 자격 증명으로 토큰 엔드포인트 호출
- 인증 서버가 access token 발급
- 그 토큰으로 API 호출
Device Authorization Grant
- 스마트 TV, 콘솔 같은 환경을 위한 확장 그랜트
- 기기 자체에서 로그인이 어렵기 때문에, 기기 화면에 코드가 뜨고 사용자가 다른 기기(폰/PC)에서 그 코드를 입력해 인증
- TV 앱이 device code, user code를 발급받음.
- 사용자에게 이 URL로 가서 이 코드를 입력하세요 보여줌.
- 사용자가 휴대폰/PC에서 로그인 및 동의
- TV 앱은 토큰 엔드포인트를 polling 하다가 승인 완료되면 access token 획득
PKCE(Proof Key for Code Exchange)
- Authorization Code 탈취당해도 토큰으로 교환 못 하게 막는 장치
- code_verifier
- code_challenge
- code_verifier를 변환한 값
- 서버에 미리 전달됨
- Authorization 요청
- code_challenge = BASE64URL(SHA256(code_verifier)) 같이 보냄.
- Authorization Code 발급
- 서버는 code_challenge를 저장하고 Authorization Code 발급
- Token 요청
- 클라이언트가 Code로 토큰 요청할 때 code_verifier 보냄.
- 서버 검증
- code_verifier -> SHA256 -> code_challenge와 비교 후 같으면 통과 다르면 거절
Authorization Code Grant 구현
깃헙 레포지토리
Client Credentials Grant 구현
깃헙 레포지토리
tags: