今回は、ドコモID(OpenID)を使ってユーザー認証させてみた。
アプリケーションの設定
GAEのアプリケーション設定で、Authentication Typeを「Federated Login」に変更する。認証が必要なページの指定
認証が必要なページは、app.yamlのスクリプトハンドラ(login: required)で指定できる。今回は/member/配下のパスについては認証が必要としてみた。app.yaml
- url: /member/(.*) script: controllers.front.member.application secure: optional login: required
認証要求ページの作成
非ログイン状態で、認証が必要なページにアクセスされると /_ah/login_required へリダイレクトされる。なので、app.yamlにこのパスについてのスクリプトハンドラを指定しておき、「認証が必要です。どのプロバイダでログインする?」的なページを作成しておく。 使用するOpenIDプロバイダが1種類の場合は、このスクリプトでログインURLへリダイレクトさせても良いだろう。app.yaml
- url: /_ah/login_required script: controllers.front.system.application secure: optional
ログインURLの取得
ログインURLは、以下の関数で取得できる。今回はドコモIDを使用する。federated_identityには各OpenIDプロバイダで指定されている OP Identifier を指定する。dest_urlにはログイン後に遷移するパスを指定しておく。ログインURLの取得
from google.appengine.api import users docomo_url = users.create_login_url( dest_url='/', federated_identity='https://i.mydocomo.com' )
XRDS文書の設置
ログイン時、OpenIDプロバイダによっては、アプリケーションサイト側に設置されたXRDS文書を参照しに来る。XRDS文書のパスは /_ah/xrds となっているため、app.yamlにスクリプトハンドラを設定しておく。今回はスクリプトにハンドリングしたが、静的ファイルとして設置しても問題ない。app.yaml
- url: /_ah/(xrds|login_required) script: controllers.front.system.application secure: optional
返却するXRDS文書。これはOpenIDプロバイダによって公開されている。
返却するXRDS文書
以上。
ログインURLにアクセスすると、ドコモ側のログイン画面が表示され、認証が必要なページにアクセスすることができる。
その他、mixi、Google、MySoftbankIDでも認証させることができた。
ただし、ドキュメント上OpenIDのサポートは「Experimental(実験的)」となっている。随分昔からこのままなので正式版にはならないかもしれない。そもそもOpenID自体がもうすでにオワコンな感じだけど。
0 件のコメント:
コメントを投稿