2011年3月4日金曜日

外部認証を使ったアプリケーション② Kay - gaema

Kayフレームワークにはソーシャル・サービス認証用に gaema パッケージが組み込まれている。
gaema は元々、GoogleAppEngine用に開発されたパッケージのようだがKay用に多少手を加えてある。この kay.ext.gaema で対応しているサービスは次の5つである。
  • google OpenID
  • google OpenID/OAuth Hybrid
  • Twitter OAuth
  • Facebook Connect
  • Yahoo OpenID
参考
Kayドキュメント kay.ext.gaema
Google code - gaema

gaemaの使用について、Kayドキュメントでは @gaema_login_required を紹介している。@gaema_login_required のパラメーターには認証で使用したいソーシャルサービスを、一つもしくは複数指定できる。しかしユーザー(情報を入れる)モデルに認証した情報を登録するためには、何らかのコードを書かなければならない。つまり、認証とユーザーモデルの紐付けはできないようだ。

『通常の』ユーザー認証説明 ⇒⇒⇒ 参考: Kayドキュメント - チュートリアル

このため gaema を利用するときは、kay.auth.backends.gaema.GAEMABackend を認証バックエンドとして指定したほうが良い。この設定については、griefworkerさんのサイトで説明されているようなので参照して欲しい。

参考: present - Kay Framework で認証に Twitter の OAuth を使う方法

バックエンドで指定する GAEMABackend では、通常の認証で使用する @login_required を利用できる。このためGoogleアカウント認証のみ対応していたいアプリケーションを、設定変更だけで他のソーシャルサービスにも対応させることが可能だ。
もし、GAEMA_VALID_SERVICES に複数のサービスを指定した場合、select_service.html が表示されサービスの選択を促すようになっている。

Twitter OAuth と Facebook Connect (GoogleMarketplaceも?)は、key と secret を取得して、GAEMA_SECRETS に次のように設定する必要がある。
GAEMA_SECRETS = {
"twitter_consumer_key": "xxxxxxxxxxxxxxxxxx",
"twitter_consumer_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"facebook_api_key": "xxxxxxxxxxxxxxxx",
"facebook_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
コードの取得は次のサイトから、

twitter developers アプリケーションの登録申請
facebook developers - register your website

gaema は OpenID, OAuth, FacebookConnect と3つのプロトコルに対応しているのが素晴らしい。

ただ、対応するプロバイダーが限られるのと、パッケージ内部が複雑でサービスの追加やUIの変更は難しそうである。また、GoogleAppEngine上でOpenID認証がサポートされるようになり、今後どうなるかは分からない。