OpenID Authentication using Artifact Binding

モバイルがらみの話、勝手に仕様考えて実装してみました。

私が少し前に思ってたこと、ここに全部書いてありましたね。
見のがしてました。。。

1. RP は他の拡張用も含めて普通にリクエスト用のデータを作ると
2. RP は OP の XRD から artifact mode 用の endpoint を見つけて、その endpoint にリクエストデータを POST する
3. OP は "artifact" なり "ticket" と言った一意な nonce を発行
4. RP は "artifact" と共に UA を OP にリダイレクトさせる
5. OP は "artifact" を受信したら同じ値を持つ事前に RP が POST したデータを元にリクエストを再構築すると
6. OP はユーザーの identity を検証する
7. OP はレスポンスを構築して、どっかに保存しとく。(key は当然 artifact)
8. OP は artifact と共に UA を RP にリダイレクトさせると
9. RP は artifact mode endpoint に対してレスポンスを取得すると

http://d.hatena.ne.jp/ZIGOROu/20090201/1233478149

素晴らしい!
ということでMobile Auth Tokenって言葉を使ってましたが、今回は"Artifact"って言葉を使ってみました。
フローも更新。

前置きはここまでにして、実際に見てみます。

■ 前提

OpenID入力がめんどい件についてはこれから考えます。
といってもOP Identifierでデモるぐらいかもしれませんが。

OPとRPわかりづらくてすみません。
ここから試せます。
http://r-weblife.sakura.ne.jp/mobile_rp/

■ RP Step 1 :

まずはじめに、RPは普通にcheckid_setupで送るようなリクエストをOPに送信。
Artifactが返されます。

■ RP Step 2 :

RP Step 1で取得したArtifactを用いてOPにUserをリダイレクトさせます。
URL長くなるからopenid.nsさえもできれば含みたくないんですが。。。

■ OP Step 1 :

OPにログインします。ここではPW不要です。
PHPライブラリについてきたサンプルOPをスクレイピングしてるだけです。
実際は端末識別番号と紐づけてて既にログイン状態もしくはワンクリックなのかもしれませんね。

■ OP Step 2 :

確認画面です。
自分のOpenID URLとRPのReturn Toを確認します。
ボタンを押すと、RPにArtifactとVerifierをつけてリダイレクトします。

■ RP Step 3 :

リダイレクトされたときについてきたパラメータを受け取ります。

■ RP Step 4 :

RP Step 3で受け取ったAtrifactとVerifierを使ってOPから認証結果を取得します。
Signatureとか不要かなと。

自分のdocomoでしか検証してないけど、Cookie使ってないので携帯でも動きます。
が、説明のために出力してるパラメータで画面がうまってうざいのでもう少し構成とか考えます。

今回、細かいレスポンスとかはめんどくさくなってしまったので、少々おかしなところがあっても見逃してください。
また、たまに動かないときもあります。そして、OP Identifierに対応するのを忘れました。

ヘボエンジニアすぎてサンプルもろくに作れない自分にがっかり。。。

□ ひっかかってるところ

  • OAuthと同じになっちゃいました (いうなればUnregisted Consumer)
  • もっとAssociationをうまく使いたい。必須にしようかな。めんどいかな。
  • セキュリティ的に落ちてない?
  • この場合のOP Initiated Flowどーするか

みなさん、iPhoneOpenSocialGoogle WaveTwitterからmixi日記に書き込むやらに夢中なようですけど、たまにはOpenIDのこと考えてみませんか?ではまた。