Authorization Code Grant는 OAuth 2.0에서 가장 널리 사용되는 인증 방식입니다. 클라이언트 애플리케이션이 인증 서버로부터 Authorization Code를 먼저 발급받고, 이 코드를 통해 액세스 토큰을 요청하는 두 단계로 이루어져 있습니다.

OAuth 2.0에서는 여러 가지 그랜트 타입(Grant Type)을 제공하지만, 보안 문제 때문에 Authorization Code Grant(특히 PKCE 적용)를 제외한 다른 방식들은 현재 거의 사용되지 않습니다.

 

 


1. PKCE를 포함한 Authorization Code Grant 흐름

PKCE를 적용하면 인증 코드 발급액세스 토큰 요청 과정이 조금 더 보안적으로 강화됩니다.

단계별 흐름

1단계: 인증 코드 요청

  • 클라이언트는 Code Challenge를 함께 보내며 인증 서버에 인증 코드를 요청합니다.

요청 예시:

GET /authorize?
   response_type=code&
   client_id=example_client&
   redirect_uri=https://example.com/callback&
   code_challenge=abc123xyz456&
   code_challenge_method=S256&
   scope=read write
  • Code Challenge:
    • Code Verifier(랜덤 문자열)를 해싱(SHA-256)해서 만든 값입니다.
    • 클라이언트는 나중에 Code Verifier를 통해 이 값을 증명합니다.

2단계: 사용자 인증 및 권한 부여

  • 사용자는 인증 서버에서 로그인하고 권한을 부여합니다.
  • 인증 서버는 Code Challenge를 저장해 둡니다.

3단계: 인증 코드 발급

  • 인증 서버는 사용자의 인증과 권한 부여가 완료되면 Authorization Code를 발급하고,
  • 클라이언트를 리디렉션 URI로 리디렉션합니다.

리디렉션 예시:

https://example.com/callback?code=AUTHORIZATION_CODE

4단계: 액세스 토큰 요청 (PKCE 적용)

  • 클라이언트는 Authorization Code와 함께 Code Verifier를 인증 서버에 전달합니다.

요청 예시:

POST /token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTHORIZATION_CODE&
redirect_uri=https://example.com/callback&
client_id=example_client&
code_verifier=original_random_string_here
  • Code Verifier:
    • 처음에 생성한 랜덤 문자열입니다.
    • 인증 서버는 이 값을 해싱해서 Code Challenge와 일치하는지 검증합니다.

5단계: 액세스 토큰 발급

  • 인증 서버는 Code Verifier를 검증한 후 액세스 토큰을 발급합니다.

응답 예시:

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "REFRESH_TOKEN"
}

2. PKCE 적용의 핵심 포인트

  1. Code Challenge와 Code Verifier
    • 클라이언트는 Code Verifier를 사용해 Code Challenge를 생성하고, 인증 서버에 증명합니다.
  2. 보안 강화
    • 중간자 공격자가 인증 코드를 탈취하더라도, Code Verifier를 모르면 액세스 토큰을 발급받을 수 없습니다.
  3. PKCE 적용 범위
    • OAuth 2.1에서는 PKCE가 모든 Authorization Code Grant에서 필수입니다.

3. PKCE 적용과 적용하지 않은 흐름 비교

구분 PKCE 미적용 PKCE 적용
인증 코드 요청 Code Challenge 없음 Code Challenge 전달
액세스 토큰 요청 클라이언트 시크릿만 사용 Code Verifier로 Code Challenge 검증
보안성 코드 탈취 시 악용 가능 코드 탈취 시 Code Verifier 없으면 무용지물

4. 결론

  • 이제 PKCE는 무조건 적용해야 합니다. 특히 OAuth 2.1에서는 모든 클라이언트에 대해 PKCE가 필수로 요구됩니다.
  • PKCE를 통해 Authorization Code Grant는 더욱 안전해졌으며, 인증 코드 탈취를 방지합니다.

최종적으로 Authorization Code Grant 흐름은 PKCE를 포함해야 보안 표준에 맞게 동작하게 됩니다.

+ Recent posts