LoginSignup
12
19

More than 3 years have passed since last update.

Python/Django による OAuth/OIDC サーバー

Posted at

Python 用の Web フレームワークである Django(ジャンゴ)で、OAuth 2.0 および OpenID Connect 対応の認可サーバー / OpenID プロバイダーを作るのも、Authlete(オースリート)をバックエンドに使えば簡単です。

1. 準備

1.1. ライブラリインストール

$ pip install authlete
$ pip install authlete-django
ライブラリ GitHub PyPI
authlete authlete-python authlete
authlete-django authlete-python-django authlete-django

1.2. Authlete アカウント

Authlete にアカウント登録をおこない、事前にサービス API キー、サービス API シークレット、クライアント ID を取得しておいてください。詳細手順はこちら

2. 認可サーバー

2.1. サンプル実装ダウンロード

$ git clone https://github.com/authlete/django-oauth-server.git
$ cd django-oauth-server

2.2. 設定

$ vi authlete.ini

※ Authlete から取得したサービス API キーとサービス API シークレットを設定します。

2.3. テスト用アカウント作成

 $ 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 = 'john@example.com'
 >>> user.set_password('john')
 >>> user.is_active = True
 >>> user.save()
 >>> quit()

※ Django に標準で入っている django.contrib.auth を用いています。

2.4. 起動

$ python manage.py runserver 8000

3. リソースサーバー

3.1. サンプル実装ダウンロード

$ git clone https://github.com/authlete/django-resource-server.git
$ cd django-resource-server

3.2. 設定

$ vi authlete.ini

※ Authlete から取得したサービス API キーとサービス API シークレットを設定します。

3.3. テスト用アカウント作成

 $ 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 = 'john@example.com'
 >>> user.set_password('john')
 >>> user.is_active = True
 >>> user.save()
 >>> quit()

※ Django に標準で入っている django.contrib.auth を用いています。

3.4. 起動

$ python manage.py runserver 8001

※ 認可サーバーのポート番号とぶつからないよう、8001 を指定しています。

4. 動作確認

4.1. アクセストークン発行

Web ブラウザを起動し、アドレスバーに次の URL(認可リクエスト)を入力してください。「{クライアントID}」の箇所は適宜置き換えてください。

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

認可ページが表示されるので、ログイン ID 入力欄とパスワード入力欄に、両方とも john を入力し、Authorize ボタンを押してください。(「テスト用アカウント作成」の手順でアカウント作成済みであることを想定しています。)

次のような画面が表示されたら成功です。access_token の右隣にある値が発行されたアクセストークンです。

redirection_endpoint_with_access_token.png

4.2. API コール

発行されたアクセストークンを用いて、リソースサーバーに API コールを行います。「{発行されたアクセストークン}」の箇所は適宜置き換えてください。

$ ACCESS_TOKEN={発行されたアクセストークン}
$ curl -v http://localhost:8001/api/time \
       -H "Authorization: Bearer ${ACCESS_TOKEN}"

次のような出力が得られれば成功です。

{
  "year":   2019,
  "month":  8,
  "day":    9,
  "hour":   14,
  "minute": 45,
  "second": 2
}

おわりに

OAuth 2.0 と OpenID Connect の難しい処理は全て、Authlete のサーバー側で処理されます。そのため、Authlete をバックエンドとして用いると、フロントエンドの認可サーバーとリソースサーバーの実装は簡単になります。このため、フロントサーバー開発者は、ユーザー管理やログイン処理など、OAuth 2.0 と OpenID Connect 以外の部分の開発により多くのリソースを割くことができるようになります。

Authlete は、下記の OpenID Certification を取得済みです。

  • Basic OP
  • Implicit OP
  • Hybrid OP
  • Config OP
  • Dynamic OP
  • Form Post OP
  • FAPI R/W OP w/ MTLS
  • FAPI R/W OP w/ Private Key

これらに加えて、CIBA や Device Flow(RFC 8628)、JARM など、世界最先端の仕様も実装済みです。

是非 Authlete の利用をご検討ください! :arrow_forward: :arrow_forward: :arrow_forward: お問い合わせフォーム

12
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
19