GAE/J+slim3上でOpenID
※ こっち見たほうがいいよ(2011年03月09日追記)
結論から言うと、OpenIDクライアントから自分で書いたのだった。サンプルソースはこちら。slim3のブランクプロジェクトに上書きコピーすれば動くと思うよ。たぶん。
http://localhost:8888/secret/index
にアクセスすると、ログインフォームにリダイレクトされるので、好きなIDを使ってログインするだけ。
自分で書いたといっても、jopenidを結構コピペ参考にしてます。jopenidは実装が超シンプルなのでOpenIDの勉強にはおすすめだと思います。ただ実用しようとして困ったことがひとつありました。このライブラリはDiscoveryが完全には実装されていないのです。XRDS文書のURLを設定ファイルに記述しておく仕様になっているので、HTML中にlink要素でエンドポイントURLを記述している はてな のOpenIDに対応できないのでした。
そのあたりを、まあ はてな だけ対応できればいいやといういいかげんな気持ちで書きなおしたのが上記リンクからダウンロードできるサンプルです。ついでにOP識別子からXRDS文書を検索するところも実装したので、最初の入力は「OP識別子」または「ユーザ自身の識別子」ということでOKとなっております。
あと自分としては認証さえできればよいので無視したけど、メアドとか追加情報の取得ほか、色んなところがいいかげんな感じです>jopenid。
最初調べはじめたときは、まずはこのあたりを読んで、
- http://www.tdtsh.com/blog/archives/346
- http://d.hatena.ne.jp/knj77/20100211/1265884534
- http://www.tdtsh.com/blog/archives/587
dyuprojectというライブラリがGAE/J上で動くということなので試してはみたのだった。GAE/J上で動かしているデモサイトもあって、
http://dyuproject.appspot.com/ (ソース)
見るとばっちり動いていてすばらしいのだけど、dyuprojectというのは元々RESTフレームワークなのだね。何かの事情でデモサイトのソースを読んでいたら、OpenIDと関係のない見慣れないフレームワークのソースを読むのがめんどくさくなって投げてしまった。OpenIDの実装も、恐らく仕様どおりちゃんと実装しているだけに複雑で、手軽には追えないのだよね。
機能が限定的でも、自分で把握できる見通しのよいものがいいなあ、という気分的なものかな。結局使わなかった。