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なるもので対応しました。

ただし

  1. Google Apps Marketplaceでは2-Legged OAuthを使うべき(らしい)
  2. 流用しているライブラリが大きいためSpin-Upに8秒ぐらいかかる

上記の理由により、AppEngineがネイティブにOpenID対応した今では
あまり日の目を見る事はなさそうです。。。が
個人のGoogle Accountを対象としたプロジェクトなど、
もしかしたら役に立つかもしれません。