Yahoo! JAPANのOpenIDがAX+popup始めました

まずは、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つの拡張用のパラメータをリクエストに含むだけです。

画面一覧

  • 【popup用】ログイン画面


  • 【popup】同意画面

  • 【AX】同意画面

  • 【AX+popup】同意画面


サンプルコード

こちらから動作を確認できます。
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/

GoogleYahoo!IncへもRequestを送れるようにしておきました。
こちら、PHPのライブラリに少し手を入れました。コードはこちら。
http://github.com/ritou/php-openid-popup-example

+α

このOpenIDの同意画面もiPhone最適化が行われたらしい。jsのロード遅い疑惑。
返されたOpenID URL(openid.identity)の値にアクセスすると、その人のプロフィール画面にリダイレクトされるようになったらしい。

さぁ、使ってみましょう!