まずは、XRDSを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/server</Type> <Type>http://specs.openid.net/extensions/pape/1.0</Type> <Type>http://openid.net/srv/ax/1.0</Type> <Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type> <URI>https://open.login.yahooapis.jp/openid/op/auth</URI> </Service> </XRD> </xrds:XRDS>
以下の記述により、対応していることを確認できます。
AX 対応
Fetchリクエストにのみ対応ということなので、以下の情報を Yahoo! JAPANからOpenID認証のタイミングで取得できるということになります。
- Profile Image
- Nickname
- Birthyear
- First Name
- Last Name
- Gender
世の中に出回っているライブラリを使って、以下のようなパラメータをRequestに追加します。
詳しくは仕様を読みましょう。
&openid.ax.mode=fetch_request
&openid.ax.required=nickname%2Cgender%2Cfirstname%2Clastname%2Cbirthyear%2Cprofile_img
&openid.ax.type.birthyear=http%3A%2F%2Faxschema.org%2FbirthDate%2FbirthYear
&openid.ax.type.firstname=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst
&openid.ax.type.gender=http%3A%2F%2Faxschema.org%2Fperson%2Fgender
&openid.ax.type.lastname=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast
&openid.ax.type.nickname=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffriendly
&openid.ax.type.profile_img=http%3A%2F%2Faxschema.org%2Fmedia%2Fimage%2Fdefault
- AXのfetch requestである
- 今回は全部必須でくれと言ってみる
- あとはそれぞれのパラメータを指定
画面は省略します。
レスポンスは、こんな感じで返されます。
&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0
&openid.ax.mode=fetch_response
&openid.ax.value.nickname= (ニックネーム)
&openid.ax.value.birthyear=(生年)
&openid.ax.value.firstname= (名字)
&openid.ax.value.lastname=(名前)
&openid.ax.value.gender= (性別)
&openid.ax.value.image=(プロフィール画像のURL)
&openid.ax.type.birthyear=http%3A%2F%2Faxschema.org%2FbirthDate%2FbirthYear
&openid.ax.type.firstname=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst
&openid.ax.type.gender=http%3A%2F%2Faxschema.org%2Fperson%2Fgender
&openid.ax.type.lastname=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast
&openid.ax.type.nickname=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffriendly
&openid.ax.type.image=http%3A%2F%2Faxschema.org%2Fmedia%2Fimage%2Fdefault
素敵ですね。
UI Extension(popup)対応
Yahoo!IncのUI Extension対応に関しては、こちらで解説しました。
Y!IncのOpenIDがPop UpとHybridに対応! - r-weblife
Yahoo! JAPANではpopupのみの対応で、langへの対応はしていないようです。
使い方としてはYahoo!Incと同じようにこんなパラメータをRequestに含めるだけです。
&openid.ns.ui=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fui%2F1.0
&openid.ui.mode=popup
Yahoo!Inc では、popupかどうかに関わらず、全てのOpenIDの画面を小さなものに揃えたのに対して、Yahoo! JAPANの場合は画面を出しわけているようです。
AX + UI
上記の2画面を組み合わせてみましょう。
使い方は、2つの拡張用のパラメータをリクエストに含むだけです。
サンプルコード
こちらから動作を確認できます。
OpenID + UI(popup) + AX : http://r-weblife.sakura.ne.jp/php-openid-popup-example/ax_example.php
OpenID + UI(popup) : http://r-weblife.sakura.ne.jp/php-openid-popup-example/
Google とYahoo!IncへもRequestを送れるようにしておきました。
こちら、PHPのライブラリに少し手を入れました。コードはこちら。
http://github.com/ritou/php-openid-popup-example
- popup用にExtension用ファイルUI.phpを追加 UI.php
- AXで使うaliasとtype identifier URIをまとめた配列を用意 ax_datatable.php
- try_auth.php/finish_auth.phpにAXの処理を追加 try_auth.phpfinish_auth.php