OAuth 2.0의 Authorization Code Grant Type

Authorization Code Grant Type은 가장 일반적으로 사용되는 OAuth 2.0 Grant Type 중 하나입니다. 클라이언트 시크릿을 기밀로 유지할 수 있는 애플리케이션을 위해 특별히 설계되어 서버 측 애플리케이션에 이상적입니다.

LoadFocus의 Authorization Code Grant Type

Authorization Code는 어떻게 작동하나요?

  1. 리다이렉션:
  • 클라이언트 애플리케이션이 사용자를 OAuth 2.0 인가 서버의 인가 엔드포인트로 리다이렉트합니다. 이 리다이렉션에는 일반적으로 client_id, response_type("code"로 설정), redirect_uri(권한 부여/거부 후 사용자를 보낼 위치), scope(애플리케이션이 요청하는 접근 수준) 등의 쿼리 파라미터가 포함됩니다.
  1. 사용자 인증:
  • 사용자가 인가 서버에 로그인하고(아직 로그인하지 않은 경우) 클라이언트 애플리케이션의 접근 요청을 검토합니다.
  1. 인가 코드 발급:
  • 사용자가 권한을 부여하면, 이전에 제공된 redirect_uri를 통해 클라이언트 애플리케이션으로 다시 리다이렉트됩니다. 리다이렉션에는 URL에 인가 코드가 포함됩니다.
  1. 토큰 교환:
  • 클라이언트 애플리케이션이 인가 서버의 토큰 엔드포인트에 POST 요청을 보내 인가 코드를 액세스 토큰으로 교환합니다. 이 요청에는 인가 코드, client_id, client_secret, redirect_uri, grant_type("authorization_code"로 설정)이 포함됩니다.
  1. 액세스 토큰 발급:
  • 인가 서버가 제공된 코드와 클라이언트 자격 증명을 성공적으로 확인하면, 클라이언트 애플리케이션에 액세스 토큰(그리고 선택적으로 리프레시 토큰)을 반환합니다.
  1. 보호된 리소스 접근:
  • 클라이언트 애플리케이션이 획득한 액세스 토큰을 사용하여 사용자를 대신하여 리소스 서버(API)에 요청을 보냅니다.

Authorization Code를 구성하는 방법

  1. 애플리케이션 등록:
  • OAuth 흐름을 시작하기 전에, OAuth 2.0 프로바이더에 애플리케이션을 등록합니다. 등록 성공 시 client_idclient_secret을 받습니다.
  1. Redirect URI 설정:
  • 애플리케이션을 등록할 때 redirect_uri를 제공해야 하는 경우가 많습니다. 이 URI는 사용자가 접근을 부여/거부한 후 인가 서버가 사용자를 보내는 곳입니다. 이 URI가 정확하고 안전한지(일반적으로 HTTPS 사용) 확인하세요.
  1. OAuth 흐름 구현:
  • 애플리케이션의 언어와 프레임워크와 호환되는 라이브러리 또는 SDK를 사용하여 이 과정을 단순화합니다.
  • 필요한 쿼리 파라미터와 함께 사용자를 인가 서버의 인가 엔드포인트로 리다이렉트하여 흐름을 시작합니다.
  • 등록한 redirect_uri와 일치하는 엔드포인트를 서버에 구현합니다. 이 엔드포인트가 수신 인가 코드를 처리합니다.
  • 토큰 엔드포인트에 POST 요청을 보내 인가 코드를 액세스 토큰으로 교환합니다.
  1. 클라이언트 시크릿 보안:
  • 클라이언트 측 코드에서 client_secret을 노출하지 마세요. 인가 코드를 액세스 토큰으로 교환할 때 서버 측에서만 사용하세요.
  1. 토큰 저장:
  • 액세스 토큰을 받으면 안전하게 저장합니다. 애플리케이션의 필요에 따라 서버 메모리, 데이터베이스 또는 보안 쿠키에 저장할 수 있습니다. 암호화된 통신을 보장하기 위해 항상 HTTPS를 사용하세요.
  1. 토큰 만료 처리:
  • 액세스 토큰은 종종 수명이 짧습니다. 리프레시 토큰이 있으면 사용자가 재인증하지 않고도 새 액세스 토큰을 얻는 데 사용할 수 있습니다.

Authorization Code에 대한 최종 정리

Authorization Code Grant Type은 특히 서버 측 애플리케이션을 위한 견고하고 안전한 사용자 인가 획득 방법입니다. 인가 코드를 액세스 토큰으로 교환하는 추가 단계는 사용자 자격 증명에 대한 직접적인 접근을 방지합니다. 구현 시에는 항상 보안을 우선시하여 HTTPS를 사용하고 클라이언트 시크릿과 토큰을 안전하게 관리하세요.