인가 코드 흐름

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2026.04.09
조회수
3
버전
v1

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.

인가 코드 흐름

개요

인가 코드 흐름(Authorization Code Flow)은 OAuth 2.0 프로토콜에서 가장 보편적이고 보안성이 높은 인증 및 권한 부여 방식 중 하나입니다. 주로 웹 애플리케이션에서 사용되며, 사용자의 자원에 접근하기 위해 클라이언트 애플리케이션이 사용자 대신 액세스 토큰을 안전하게 획득할 수 있도록 설계되었습니다. 이 흐름은 중간자 공격(MitM)이나 토큰 노출 위험을 최소화하기 위해 인가 코드(Authorization Code)라는 일시적이고 단발성인 중간 토큰을 사용합니다.

인가 코드 흐름은 클라이언트 애플리케이션이 사용자 인증을 처리하지 않고, 대신 인증 서버를 통해 안전하게 액세스 토큰을 획득할 수 있도록 해줍니다. 이 방식은 특히 서버 사이드 애플리케이션에서 널리 사용되며, 민감한 정보를 클라이언트 측에 노출하지 않도록 설계되어 있습니다.


작동 원리

인가 코드 흐름은 다음과 같은 단계로 구성됩니다:

1. 사용자 리디렉션 요청

클라이언트 애플리케이션은 사용자를 인증 서버의 인가 엔드포인트(Authorization Endpoint)로 리디렉션합니다. 이 요청에는 다음 정보가 포함됩니다:

  • [client_id](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%20%EC%9D%B8%EC%A6%9D/client_id): 클라이언트 애플리케이션의 고유 식별자
  • [redirect_uri](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/%EC%9D%B8%EC%A6%9D%20%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C/redirect_uri): 인가 후 사용자를 다시 돌려보낼 URI
  • [response_type=code](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/OAuth%202.0/response_type%3Dcode): 인가 코드를 요청함을 명시
  • [scope](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/%EA%B6%8C%ED%95%9C%20%EA%B4%80%EB%A6%AC/scope): 요청하는 권한 범위 (예: profile, email)
  • [state](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/CSRF%20%EB%B3%B4%ED%98%B8/state): CSRF 공격 방지를 위한 임의의 난수 값

예시 요청:

GET /authorize?
  response_type=code&
  client_id=abc123&
  redirect_uri=https://client.example.com/callback&
  scope=profile email&
  state=xyz789

2. 사용자 인증 및 동의

사용자는 인증 서버에서 로그인하고, 클라이언트 애플리케이션이 요청한 권한 범위에 동의합니다. 인증 서버는 사용자의 신원을 확인한 후, 동의 여부를 판단합니다.

3. 인가 코드 발급

사용자가 동의하면, 인증 서버는 redirect_uri로 사용자를 다시 리디렉션하면서 인가 코드를 전달합니다. 이 코드는 짧은 유효 시간(일반적으로 수십 초에서 수 분)을 가지며, 한 번만 사용할 수 있습니다.

예시 응답:

HTTP 302 Found
Location: https://client.example.com/callback?code=AUTH_CODE&state=xyz789

⚠️ 보안 주의: 인가 코드는 URL의 쿼리 파라미터로 전달되므로, HTTPS를 반드시 사용해야 하며, 로그 기록에 남지 않도록 주의해야 합니다.

4. 액세스 토큰 요청

클라이언트 애플리케이션은 인가 코드를 받은 후, 인증 서버의 토큰 엔드포인트(Token Endpoint)로 POST 요청을 보내 액세스 토큰을 요청합니다. 이 요청에는 다음 정보가 포함됩니다:

  • grant_type=authorization_code
  • code: 이전 단계에서 받은 인가 코드
  • redirect_uri: 동일한 리디렉션 URI
  • client_id[client_secret](/doc/%EA%B8%B0%EC%88%A0/%EB%B3%B4%EC%95%88/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%20%EC%9D%B8%EC%A6%9D/client_secret): 클라이언트 인증을 위한 정보

예시 요청:

POST /token HTTP/1.1
Host: auth.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=https://client.example.com/callback&
client_id=abc123&
client_secret=secret456

5. 액세스 토큰 발급

인증 서버는 요청을 검증한 후, 유효한 경우 액세스 토큰(Access Token)과 필요 시 리프레시 토큰(Refresh Token)을 발급합니다.

응답 예시:

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "def789...",
  "scope": "profile email"
}

이제 클라이언트는 액세스 토큰을 사용하여 사용자의 자원 서버(API)에 안전하게 접근할 수 있습니다.


보안 장점

인가 코드 흐름은 다른 OAuth 흐름(예: 임플리시트 흐름)에 비해 다음과 같은 보안적 이점을 제공합니다:

  • 클라이언트 인증 강화: client_secret을 사용하여 클라이언트의 신원을 검증할 수 있음
  • 토큰 노출 방지: 액세스 토큰이 브라우저 URL이나 클라이언트 측에 노출되지 않음
  • CSRF 보호: state 파라미터를 통해 크로스 사이트 요청 위조 공격 방지
  • 단일 사용 코드: 인가 코드는 한 번만 사용 가능하며, 재사용 시 무효화됨

주의사항 및 최적화

  • PKCE(Proof Key for Code Exchange): 공개 클라이언트(예: 모바일 앱)에서도 인가 코드 흐름을 안전하게 사용하기 위해 PKCE를 결합하는 것이 권장됩니다. 이는 코드 도용 공격을 방지합니다.
  • HTTPS 필수: 모든 통신은 반드시 암호화된 채널(HTTPS)을 통해 이루어져야 합니다.
  • 리디렉션 URI 검증: 인증 서버는 등록된 리디렉션 URI와 요청된 URI가 일치하는지 반드시 검증해야 합니다.

관련 문서 및 참고 자료

요약: 인가 코드 흐름은 웹 애플리케이션에서 안전한 권한 부여를 위한 표준적인 방법으로, 보안성과 신뢰성을 모두 갖춘 설계입니다. 특히 서버 사이드 애플리케이션에서는 반드시 이 방식을 사용하는 것이 권장됩니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?