전편에서 OAuth2의 기본 개념과 작동 방식을 살펴보았습니다. 이번 글에서는 Django OAuth Toolkit(DOT)을 활용하여 OAuth2 인증 서버를 구성하는 방법을 중심으로 다뤄보겠습니다.


1. Django OAuth Toolkit 설치

OAuth2 서버를 구현하기 위해 먼저 Django OAuth Toolkit(DOT)을 설치해야 합니다. 간단한 명령어로 설치할 수 있습니다:

pip install django-oauth-toolkit

설치가 완료되면, INSTALLED_APPSoauth2_provider를 추가하고 마이그레이션을 실행합니다. 마이그레이션 후 Django Admin 페이지에서 DOT가 제공하는 추가 메뉴를 확인할 수 있습니다.


2. Admin에서 새로 생긴 메뉴 살펴보기

DOT를 설치하면 Django Admin에 다음과 같은 5개의 메뉴가 추가됩니다:

1) Access tokens

  • 발급된 액세스 토큰을 관리합니다.
  • 각 토큰의 유효기간, 관련 클라이언트 애플리케이션, 사용자 정보를 확인할 수 있습니다.
  • 액세스 토큰은 인증된 클라이언트가 보호된 리소스에 접근하는 데 사용되는 키입니다.

2) Refresh tokens

  • 리프레시 토큰을 관리합니다.
  • 액세스 토큰이 만료되었을 때, 새로운 액세스 토큰을 발급받는 데 사용됩니다.
  • 이를 통해 사용자는 재인증 없이 연속적인 작업을 수행할 수 있습니다.

3) Application

  • OAuth2 클라이언트 애플리케이션을 등록하고 관리합니다.
  • 애플리케이션은 인증 서버와 통신하기 위해 등록해야 하며, 다양한 설정 필드가 제공됩니다.

4) Grant

  • 권한 코드(Authorization Code)를 관리합니다.
  • 권한 코드는 클라이언트 애플리케이션이 액세스 토큰을 요청하는 데 필요한 임시 키입니다.

5) ID tokens

  • 발급된 ID 토큰을 관리합니다.
  • ID 토큰은 OAuth2와 OpenID Connect(OIDC)를 결합할 때 사용되며, 사용자 인증 정보와 클라이언트 애플리케이션 정보를 포함합니다.
  • 클라이언트가 OpenID Connect 프로토콜을 활용해 사용자 정보를 얻을 때 사용됩니다.

3. Application 메뉴 상세 설명

OAuth2 서버의 핵심은 클라이언트 애플리케이션의 등록입니다. Application 메뉴에서 다음과 같은 필드를 설정할 수 있습니다:

1) Name

애플리케이션의 이름입니다. 관리자가 쉽게 식별할 수 있도록 명확하게 작성하세요.

2) Client ID

애플리케이션의 고유 식별자입니다. OAuth2 서버가 클라이언트를 식별하는 데 사용되며, 자동으로 생성됩니다.

3) Client Secret

클라이언트 인증 시 사용하는 비밀 키입니다. 서버 기반 애플리케이션(Confidential)에만 적용되며, 안전하게 보관해야 합니다.

4) Client Type

클라이언트 애플리케이션의 유형입니다:

  • Confidential: 비밀 키를 안전하게 저장할 수 있는 서버 기반 애플리케이션.
  • Public: 비밀 키를 저장할 수 없는 모바일 앱이나 SPA(Single Page Application).

5) Authorization Grant Type

클라이언트 애플리케이션이 사용할 인증 방식입니다. 주요 옵션:

  • Authorization Code: 가장 일반적이고 보안성이 높은 방식.
  • Password: 사용자의 아이디/비밀번호를 직접 입력받아 인증.
  • Client Credentials: 서버 간 통신에 적합.

6) Redirect URIs

인증 성공 후 Authorization Code 또는 Access Token이 전달될 클라이언트 애플리케이션의 URL입니다.

  • 중요: 클라이언트 쪽 설정과 반드시 일치해야 합니다.
  • URL이 불일치할 경우 OAuth2 서버는 권한 코드 또는 토큰을 전달하지 않습니다.
  • 보안을 위해 HTTPS를 사용하는 것이 권장됩니다.

7) Algorithm

토큰 암호화에 사용하는 알고리즘을 지정합니다. 기본값은 RS256이며, 이는 RSA 기반의 서명 알고리즘입니다.

  • RS256: 비대칭 암호화를 사용하여, 공용 키로 서명을 검증합니다.
  • 필요에 따라 다른 알고리즘으로 변경 가능합니다.

8) Skip Authorization

True로 설정하면 사용자 승인 없이 클라이언트 애플리케이션에 자동으로 권한을 부여합니다. 내부 시스템이나 트러스트된 애플리케이션에서 유용합니다.


4. 요약 및 다음 단계

이번 글에서는 Django OAuth Toolkit(DOT)의 Admin 메뉴와 특히 Application 필드를 중심으로 OAuth2 서버를 구성하는 방법을 살펴보았습니다. 이를 통해 클라이언트 애플리케이션 등록 과정과 각 필드의 역할을 이해할 수 있었습니다.

다음 글에서는 이번 포스트에서 언급한 Client Type에 대해 더욱 깊이 탐구해보겠습니다. 특히, ConfidentialPublic 타입을 비교하고, 이 두 가지 타입이 OAuth2에서 어떻게 사용되는지 자세히 설명할 예정입니다. 또한, 다음 내용을 다룰 계획입니다:

  • Client Type과 PKCE의 관계: PKCE(Proof Key for Code Exchange)가 왜 Public 클라이언트에서 중요한지.
  • Client Secret의 역할: Confidential 클라이언트에서 비밀 키가 어떻게 사용되는지.
  • Authorization Code 방식의 흐름과 PKCE: OAuth2에서 가장 표준적으로 사용되는 Grant Type의 핵심을 파헤칩니다.

Authorization Code 방식의 흐름을 명확히 이해하려면 PKCE와 Client Type의 상호작용을 제대로 아는 것이 필수입니다. 다음 글에서 이 주제에 대해 심층적으로 다뤄 보겠습니다.

OAuth 2.0 Authorization Code Grant Flow