Skip to content

Latest commit

 

History

History
209 lines (157 loc) · 10.8 KB

README.ja.md

File metadata and controls

209 lines (157 loc) · 10.8 KB

認可サーバー実装 (Python)

概要

OAuth 2.0OpenID Connect をサポートする認可サーバーの Python による実装です。

この実装は Django API と authlete-python-django ライブラリを用いて書かれています。 Django は Python で書かれた Web フレームワークの一つです。 authlete-python-django は、認可サーバーとリソースサーバーを実装するためのユーティリティークラス群を提供するオープンソースライブラリです。 authlete-python-django は authlete-python ライブラリを使用しており、こちらは Authlete Web API とやりとりするためのオープンソースライブラリです。

この認可サーバーにより発行されたアクセストークンは、Authlete をバックエンドサービスとして利用しているリソースサーバーに対して使うことができます。 django-resource-server はそのようなリソースサーバーの実装です。 OpenID Connect Core 1.0 で定義されているユーザー情報エンドポイントをサポートし、 保護リソースエンドポイントの実装例も含んでいます。

ライセンス

Apache License, Version 2.0

ソースコード

https://github.com/authlete/django-oauth-server

Authlete について

Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (概説)。 Authlete が提供するデフォルト実装を使うことにより、もしくはこの実装 (django-oauth-server) でおこなっているように Authlete Web API を用いて認可サーバーを自分で実装することにより、OAuth 2.0 と OpenID Connect の機能を簡単に実現できます。

この認可サーバーの実装を使うには、Authlete から API クレデンシャルズを取得し、authlete.ini に設定する必要があります。 API クレデンシャルズを取得する手順はとても簡単です。 単にアカウントを登録するだけで済みます (サインアップ)。 詳細はクイックガイドを参照してください。

実行方法

  1. authlete-python ライブラリと authlete-python-django ライブラリをインストールします。

     $ pip install authlete
     $ pip install authlete-django
    
  2. この認可サーバーの実装をダウンロードします。

     $ git clone https://github.com/authlete/django-oauth-server.git
     $ cd django-oauth-server
    
  3. 設定ファイルを編集して API クレデンシャルズをセットします。

     $ vi authlete.ini
    
  4. テスト用のユーザーアカウントを作成します。

     $ python manage.py migrate
     $ python manage.py shell
     >>> from django.contrib.auth.models import User
     >>> user = User()
     >>> user.username = 'john'
     >>> user.first_name = 'John'
     >>> user.last_name = 'Smith'
     >>> user.email = '[email protected]'
     >>> user.set_password('john')
     >>> user.is_active = True
     >>> user.save()
     >>> quit()
    
  5. http://localhost:8000 で認可サーバーを起動します。

     $ python manage.py runserver
    

エンドポイント

この実装は、下表に示すエンドポイントを公開します。

エンドポイント パス
認可エンドポイント /api/authorization
トークンエンドポイント /api/token
JWK Set エンドポイント /api/jwks
設定エンドポイント /.well-known/openid-configuration
取り消しエンドポイント /api/revocation
イントロスペクションエンドポイント /api/introspection

認可エンドポイントとトークンエンドポイントは、RFC 6749OpenID Connect Core 1.0OAuth 2.0 Multiple Response Type Encoding PracticesRFC 7636 (PKCE)、その他の仕様で説明されているパラメーター群を受け付けます。

JWK Set エンドポイントは、クライアントアプリケーションが (1) この OpenID プロバイダーによる署名を検証できるようにするため、また (2) この OpenID へのリクエストを暗号化できるようにするため、JSON Web Key Set ドキュメント (JWK Set) を公開します。

設定エンドポイントは、この OpenID プロバイダーの設定情報を OpenID Connect Discovery 1.0 で定義されている JSON フォーマットで公開します。

取り消しエンドポイントはアクセストークンやリフレッシュトークンを取り消すための Web API です。 その動作は RFC 7009 で定義されています。

イントロスペクションエンドポイントはアクセストークンやリフレッシュトークンの情報を取得するための Web API です。 その動作は RFC 7662 で定義されています。

認可リクエストの例

次の例は Implicit フローを用いて認可エンドポイントからアクセストークンを取得する例です。 {クライアントID} となっているところは、あなたのクライアントアプリケーションの実際のクライアント ID で置き換えてください。 クライアントアプリケーションについては、クイックガイド および開発者コンソールのドキュメントを参照してください。

http://localhost:8000/api/authorization?client_id={クライアントID}&response_type=token

上記のリクエストにより、認可ページが表示されます。 認可ページでは、ログイン情報の入力と、"Authorize" ボタン (認可ボタン) もしくは "Deny" ボタン (拒否ボタン) の押下が求められます。 「実行方法」で示した通りにユーザーアカウントを作成済みであれば、 ログイン ID とパスワードはどちらも john です。

一度ログインが成功すると、認可ページはログインフォームを表示しないかもしれません。 ログインフォームを強制的に表示させるには、認可リクエストの末尾に &prompt=login を追加してください。

Amazon Cognito

この実装は、Amazon Cognito をユーザーデータベースとして使うサンプルコードを含んでいます。 サンプルコードを有効にするには、次の手順を踏んでください。

  1. AWS SDK for Python (Boto3) をインストールします。

     $ pip install boto3
    
  2. django_oauth_server/settings.py を開き、 AUTHENTICATION_BACKENDSbackends.CognitoBackend を追加します。

     AUTHENTICATION_BACKENDS = ('backends.CognitoBackend',)
    
  3. 同ファイル内の COGNITO_USER_POOL_IDCOGNITO_CLIENT_ID を適切に設定します。

     COGNITO_USER_POOL_ID = 'YOUR_COGNITO_USER_POOL_ID'
     COGNITO_CLIENT_ID    = 'YOUR_COGNITO_CLIENT_ID'
    

Cognito ユーザープールに紐付く Cognito クライアントが ALLOW_ADMIN_USER_PASSWORD_AUTH をサポートしなければならないこと、及び、AWS アカウントが Cognito の AdminInitiateAuth APIAdminGetUser API を呼ぶのに必要な権限を持っている必要があることに注意してください。

詳細は Amazon Cognito と最新の OAuth/OIDC 仕様 を参照してください。

その他の情報

コンタクト

コンタクトフォーム : https://www.authlete.com/ja/contact/

目的 メールアドレス
一般 [email protected]
営業 [email protected]
広報 [email protected]
技術 [email protected]