Google App EngineでOpenID + OAuth Hybrid
勢いづいたので、OpenID+OAuth Hybridもアップしました。
http://code.google.com/p/appengine-openid-test/source/browse/#svn/trunk/marketplace-template-hybrid
Hybridとは
OpenIDの認証と一緒に(3-Legged) OAuthの認証を一緒にやったらええやん、というものです。
http://code.google.com/intl/ja/googleapps/domain/sso/openid_reference_implementation.html
ベースになっているのは@shin1ogawaさんのアップしたテンプレートです。
http://shin1o.blogspot.com/2010/04/marketplace-appengine-java.html
Hybrid化
AuthRequestHelperにOpenIDのAxAttributeを追加するのですが、
同時に、requestOauthAuthorization()をつけるとHybridになります。
Consumer登録
Hybridとはいえ、OAuth Consumerになるので
https://www.google.com/accounts/ManageDomains
でドメインの登録が必要です。
(しなくてもエラーにはなりませんが、普通のOpenIDとして動作します。)
GData Client Libraryが未対応
Googleの提供しているGData Client LibraryがHybridに対応できてません^^
具体的には、Hybridの場合、request_token_secretなしでaccess_tokenを取得できるのですが、
GoogleOAuthHelperというクラスでrequest_token_secretを必須としているため、
バリデーションエラーとなってしまいます。
そこで、GDataと同名のパッケージを用意してHybridHelperなるもので対応しました。
ただし
- Google Apps Marketplaceでは2-Legged OAuthを使うべき(らしい)
- 流用しているライブラリが大きいためSpin-Upに8秒ぐらいかかる
上記の理由により、AppEngineがネイティブにOpenID対応した今では
あまり日の目を見る事はなさそうです。。。が
個人のGoogle Accountを対象としたプロジェクトなど、
もしかしたら役に立つかもしれません。