RailsでOpenID

Railsを使ってOpenIDのRPを作ってみたので、
早速、mixiで試してみた。


その前にruby-openidのサンプルソースの修正。
(サンプルソースはruby-openidをgemインストールすると
ruby\lib\ruby\gems\1.8\gems\ruby-openid-2.1.2\examples\rails_openid
にあります)

  • プロキシを指定

OpenIDの接続でプロキシを指定したい場合は
以下をstartメソッド直後に追加。

ENV['http_proxy']="http://proxy:8080"
OpenID.fetcher_use_env_http_proxy

  • AXの要求

 AXデータを要求する場合は

axreq = OpenID::AX::FetchRequest.new
axreq.add(OpenID::AX::AttrInfo.new('http://schema.openid.net/namePerson/friendly', 'nickname', true))
oidreq.add_extension(axreq)


取得は

ax_resp = OpenID::AX::FetchResponse.from_success_response(oidresp)


AttrInfo.newの引数は


第1引数:アトリビュート
第2引数:項目名(てきとう)
第3引数:必須要求の場合はtrue、任意要求の場合はfalse
第4引数:取得要求件数(省略時1)


てな感じです。


アトリビュートはデータに対応したURLで
http://schema.openid.net/namePerson/friendly」はニックネームを示します。
http://openid.net/specs/openid-attribute-properties-list-1_0-01.html
なんかを参考。
URLは「schema.openid.net」やら「openid.net/schema」やら「axschema.org」
でも取得できたりするみたい。違いはよくわかりません。


で結果、mixiのOPレスポンス。(https://mixi.jp/


mixiレスポンス(AX)

openid.mode=id_res&
openid.claimed_id=https://id.mixi.jp/xxxxxx&
openid.identity=https://id.mixi.jp/xxxxxx&
openid.op_endpoint=https://mixi.jp/openid_server.pl&
openid.return_to=http://localhost:3000/consumer/complete%3Fdid_ax%3Dy&
openid.response_nonce=2008-10-03T04:43:xxxxxxxxx&
openid.assoc_handle=1223008067:xxxxxxxxxxxxxxxxxxxx:xxxxxxxxxx&
openid.ax.type.nickname=http://schema.openid.net/namePerson/friendly&
openid.ns.ax=http://openid.net/srv/ax/1.0&
openid.ax.mode=fetch_response&
openid.ax.value.nickname=den&
openid.ns=http://specs.openid.net/auth/2.0&
openid.signed=mode,claimed_id,identity,op_endpoint,return_to,response_nonce,assoc_handle,ax.type.nickname,ns.ax,ax.mode,ax.value.nickname&
openid.sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

mixiレスポンス(sreg)

/consumer/complete?did_sreg=y&
openid.mode=id_res&
openid.claimed_id=https://id.mixi.jp/xxxxxx&
openid.identity=https://id.mixi.jp/xxxxxx&
openid.op_endpoint=https://mixi.jp/openid_server.pl&
openid.return_to=http://localhost:3000/consumer/complete%3Fdid_sreg%3Dy&
openid.response_nonce=2008-10-03T04:51:xxxxxxxxx&
openid.assoc_handle=1223008067:xxxxxxxxxxxxxxxxxxxx:xxxxxxxxxx&
openid.ns.sreg=http://openid.net/extensions/sreg/1.1&
openid.sreg.nickname=den&
openid.ns=http://specs.openid.net/auth/2.0&
openid.signed=mode,claimed_id,identity,op_endpoint,return_to,response_nonce,assoc_handle,ns.sreg,sreg.nickname&
openid.sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


無事、identityが取得できました。
また、sreg、AX共にニックネームが取得できてます。


取得できる情報はなぜか現在ニックネームだけみたいです。
名前や性別も情報としては保持しているはずなのになぁ。