Skip to content

Latest commit

 

History

History
190 lines (147 loc) · 8.86 KB

README.ja.md

File metadata and controls

190 lines (147 loc) · 8.86 KB

リソースサーバー実装 (Python)

概要

これはリソースサーバーの 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.0OpenID Connect をサポートしています。

ライセンス

Apache License, Version 2.0

ソースコード

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

Authlete について

Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (概説)。 Authlete が提供するデフォルト実装を使うことにより、もしくは 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-resource-server.git
     $ cd django-resource-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:8001 でリソースサーバーを起動します。

     $ python manage.py runserver 8001
    

エンドポイント

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

エンドポイント パス
ユーザー情報エンドポイント /api/userinfo
時刻エンドポイント /api/time

ユーザー情報エンドポイント

ユーザー情報エンドポイントは、OpenID Connect Core 1.05.3. UserInfo Endpoint に記述されている要求事項を実装したものです。

このエンドポイントは、クライアントアプリケーションの設定に応じて、ユーザー情報を JSON 形式もしくは JWT 形式で返します。 クライアントアプリケーションのメタデータの userinfo_signed_response_alguserinfo_encrypted_response_alg の両方とも指定されていなければ、ユーザー情報は素の JSON で返されます。 そうでない場合は、シリアライズされた JWT で返されます。 Authlete はクライアントアプリケーションのメタデータを管理するための Web コンソール (デベロッパー・コンソール) を提供しています。 クライアントアプリケーションのメタデータについては、 OpenID Connect Dynamic Client Registration 1.02. Client Metadata を参照してください。

エンドポイントから返されるユーザー情報には、ユーザーのクレームが含まれています。 手短に言うと、クレームとは、名前やメールアドレスなどの、ユーザーに関する情報です。Authlete は (OpenID Connect をサポートしているにもかかわらず) ユーザーデータを管理しないので、あなたがクレーム値を提供しなければなりません。 これは、UserInfoRequestHandlerSpi インターフェースを実装することでおこないます。

このリソースサーバーの実装では、UserInfoRequestHandlerSpiImplUserInfoRequestHandlerSpi インターフェースの実装で、django.contrib.auth からクレーム値を取り出しています。

時刻エンドポイント

このリソースサーバーに実装されているカントリーエンドポイントは、 保護リソースエンドポイントの一例に過ぎません。 主な目的は、保護リソースエンドポイントにおけるアクセストークンの有効性の確認方法を示すことです。

時刻エンドポイントのパスは /api/time です。 このエンドポイントは RFC 67502.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 を参照してください。

その他の情報

コンタクト

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

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