これはリソースサーバーの Python 実装です。 OpenID Connect Core 1.0 で定義されているユーザー情報エンドポイントをサポートし、また、RFC 6750 (The OAuth 2.0 Authorization Framework: Bearer Token Usage) に定義されている方法でアクセストークンを受け取る保護リソースエンドポイントの例も含んでいます。
この実装は Django と、authlete-python-django ライブラリを用いて書かれています。
クライアントアプリケーションが提示したアクセストークンの有効性を調べるため、このリソースサーバーは Authlete サーバーに問い合わせをおこないます。 これはつまり、このリソースサーバーは、アクセストークンを発行した認可サーバーが Authlete をバックエンドサービスとして使用していることを期待していることを意味します。 django-oauth-server はそのような認可サーバーの実装であり、OAuth 2.0 と OpenID Connect をサポートしています。
Apache License, Version 2.0
https://github.com/authlete/django-resource-server
Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (概説)。 Authlete が提供するデフォルト実装を使うことにより、もしくは Authlete Web API を用いて認可サーバーを自分で実装することにより、OAuth 2.0 と OpenID Connect の機能を簡単に実現できます。
このリソースサーバーの実装を使うには、Authlete から API クレデンシャルズを取得し、authlete.ini
に設定する必要があります。 API クレデンシャルズを取得する手順はとても簡単です。
単にアカウントを登録するだけで済みます (サインアップ)。
詳細はクイックガイドを参照してください。
-
authlete-python ライブラリと authlete-python-django ライブラリをインストールします。
$ pip install authlete $ pip install authlete-django
-
このリソースサーバーの実装をダウンロードします。
$ git clone https://github.com/authlete/django-resource-server.git $ cd django-resource-server
-
設定ファイルを編集して API クレデンシャルズをセットします。
$ vi authlete.ini
-
テスト用のユーザーアカウントを作成します。
$ 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()
-
http://localhost:8001
でリソースサーバーを起動します。$ python manage.py runserver 8001
この実装は、下表に示すエンドポイントを公開します。
エンドポイント | パス |
---|---|
ユーザー情報エンドポイント | /api/userinfo |
時刻エンドポイント | /api/time |
ユーザー情報エンドポイントは、OpenID Connect Core 1.0 の 5.3. UserInfo Endpoint に記述されている要求事項を実装したものです。
このエンドポイントは、クライアントアプリケーションの設定に応じて、ユーザー情報を
JSON 形式もしくは JWT 形式で返します。 クライアントアプリケーションのメタデータの
userinfo_signed_response_alg
と userinfo_encrypted_response_alg
の両方とも指定されていなければ、ユーザー情報は素の JSON で返されます。
そうでない場合は、シリアライズされた JWT で返されます。 Authlete
はクライアントアプリケーションのメタデータを管理するための Web コンソール
(デベロッパー・コンソール) を提供しています。
クライアントアプリケーションのメタデータについては、
OpenID Connect Dynamic Client Registration 1.0 の
2. Client Metadata を参照してください。
エンドポイントから返されるユーザー情報には、ユーザーのクレームが含まれています。
手短に言うと、クレームとは、名前やメールアドレスなどの、ユーザーに関する情報です。Authlete は
(OpenID Connect をサポートしているにもかかわらず)
ユーザーデータを管理しないので、あなたがクレーム値を提供しなければなりません。
これは、UserInfoRequestHandlerSpi
インターフェースを実装することでおこないます。
このリソースサーバーの実装では、UserInfoRequestHandlerSpiImpl
が UserInfoRequestHandlerSpi
インターフェースの実装で、django.contrib.auth
からクレーム値を取り出しています。
このリソースサーバーに実装されているカントリーエンドポイントは、 保護リソースエンドポイントの一例に過ぎません。 主な目的は、保護リソースエンドポイントにおけるアクセストークンの有効性の確認方法を示すことです。
時刻エンドポイントのパスは /api/time
です。
このエンドポイントは RFC 6750 の 2.1. Authorization Request Header Field
で定義されている方法でアクセストークンを受け付けます。
$ ACCESS_TOKEN=YOUR_ACCESS_TOKEN
$ curl -v http://localhost:5001/api/time \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
時刻エンドポイントは、現在時刻 (UTC) に関する情報を JSON で返します。 下記はレスポンスの例です。
{
"year": 2019,
"month": 8,
"day": 9,
"hour": 14,
"minute": 45,
"second": 2
}
Web API を OAuth 2.0 のアクセストークンで保護する方法に関する一般的な情報および Authlete 固有の情報については、Protected Resource を参照してください。
- Authlete - Authlete ホームページ
- authlete-python - Python 用 Authlete ライブラリ
- authlete-python-djangyo - Django 用 Authlete ライブラリ
- django-oauth-server - 認可サーバーの実装
コンタクトフォーム : https://www.authlete.com/ja/contact/
目的 | メールアドレス |
---|---|
一般 | [email protected] |
営業 | [email protected] |
広報 | [email protected] |
技術 | [email protected] |