2014/05/01

ドコモIDでOpenID認証してみる

Google App Engineでは、簡単にOpenID認証できる仕組みがある。

今回は、ドコモ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文書
<!--xml version="1.0" encoding="UTF-8"?--><br /> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"><br /> <xrd><br /> <service priority="0"><br /> <type>http://specs.openid.net/auth/2.0/return_to</Type><br /> <uri>https://gcp-memo.appspot.com/</URI><br /> </Service><br /> </XRD><br /> </xrds:XRDS><br />

以上。

ログインURLにアクセスすると、ドコモ側のログイン画面が表示され、認証が必要なページにアクセスすることができる。

その他、mixi、Google、MySoftbankIDでも認証させることができた。

ただし、ドキュメント上OpenIDのサポートは「Experimental(実験的)」となっている。随分昔からこのままなので正式版にはならないかもしれない。そもそもOpenID自体がもうすでにオワコンな感じだけど。

0 件のコメント:

コメントを投稿