CS 정리

OAuth2의 4가지 Grant Type

문쿼리 2025. 7. 21. 00:51

1. Authorization Code Grant

사용자 로그인 → Authorization Code → Access Token 교환

  • 사용처: 웹 서버, 모바일 앱 (Authorization Code + PKCE)
  • 보안 우수: 토큰은 브라우저에 노출되지 않음

흐름

① 사용자: 브라우저 → 로그인
② 인증 서버:
Authorization Code 발급
③ 클라이언트 서버:
CodeAccess Token 교환
④ 클라이언트 서버:
Token으로 API 호출

OpenID Connect (OIDC)에서도 가장 많이 사용하는 표준 방식

 

* PKCE (Proof Key for Code Exchange)

보안 강화를 위한 보조 프로토콜

클라이언트 서버에서 인증 요청 시 랜덤 문자열을 암호화(SHA-256)하여 해시값을 보내고,

인증 서버가 해당 해시값을 저장,

클라이언트 서버가 토큰 요청 시 원본 문자열을 보내고,

인증 서버가 해당 문자열과 저장된 해시값을 비교해서 동일하면 토큰 발급

 

2. Implicit Grant (보안 취약)

Access Token을 바로 발급 (Authorization Code 없음)

  • 사용처: 과거 SPA (React, Angular 등)
  • 단점: Access Token이 URL로 노출됨 → 보안에 취약
  • 현재는 사용 지양, 대신 Authorization Code + PKCE 권장

 

3. Resource Owner Password Credentials Grant

사용자가 앱에 직접 ID/PW 입력 → 바로 토큰 발급

  • 사용처: 신뢰할 수 있는 앱에서만 (예: 사내 앱)
  • 보안상 위험 (사용자 비밀번호 유출 우려)

흐름

① 앱에서 사용자 ID/PW 입력
② 바로 Access Token 요청
Access Token으로 API 호출

현재는 OAuth2.1에서 제거

 

4. Client Credentials Grant

 

사용자 없이 클라이언트 자체 인증

  • 사용처: 서버 간 API 통신 / 백엔드 작업
  • Access Token은 클라이언트 자격 정보(Client ID, Secret)로 발급

흐름

① 클라이언트 → 인증 서버: Client ID/Secret 제출
② 인증 서버 → Access Token 발급
③ 클라이언트 → API 호출