Simple auth on App Engine without passwords で紹介されている simpleauth (Google code) (github) を使って、Twitter、Google、Facebook の oauth 認証を試してみた。simpleauth は Alex Vagin さんが作った Google App Engine / Python2.7用のoauth 認証デモ。GAE の新しい Web フレームワーク webapp2 を活かした設計になっている。
作者が公開しているデモはこちら。Google, Facebook, Yahoo! (OpenID), Twitter, LinkedIn, Windows Liveでの認証ができるようになっている。
下準備として、Twitter でアプリケーションを作成する。
https://dev.twitter.com/apps にアクセスして Create a new application する。
Callback URL に https://simplemash.appspot.com/auth/twitter/callback と入力しておく。URLの最後にスラッシュ (/) を入れないこと。Callback URL を入力しておかないと(コールバックするモードではなく)PINコードを入力するモードになってしまう。
後で使うので、Consumer Key と Consumer Secret を参照できるようにしておく。これらの値が外部に漏れると大変なので厳重に管理すること。
次に Git Bash を起動する。gae-simpleauth を clone した後、example を動かす準備をする。GAE に配備したとき simpleauth ライブラリの参照がうまくいかないので、ちょっと工夫が必要。
$git clone https://code.google.com/p/gae-simpleauth/ $cd gae-simpleauth $rm example/lib/simpleauth $cp -r simpleauth/ example/lib/ $cd example $mv secrets.py.template secrets.py $vi secrets.py SESSION_KEY = 'セッション用のランダムで推測できない文字列を入れる' TWITTER_CONSUMER_KEY = 'アプリケーションのConsumer Key' TWITTER_CONSUMER_SECRET = 'アプリケーションのConsumer Secret' $vi app.yaml application を Google App Engine のアプリケーションIDに変更。 version を変えた場合は、Google App Engine のダッシュボードで version を変更するのを忘れずに。
次に Google App Engine Launcher を起動。File>Add exsiting application で \gae-simpleauth\example を追加。
Twitter からのコールバックがあるため、テストサーバでは動かせず、Deployする必要がある。
https://<アプリケーションID>.appspot.com/ にアクセスして「Twitter」ボタンを押すと、Twitterで認証され、/profile ページが表示される。
ちなみに動かしたのは WIndows 7。Windows の vi はコピーが Ctrl + Insert, ペーストが Shift + Insert なことを学んだ。
同様の手順で、Google、Facebook についてもアプリケーションを作成して認証を行う。
Google でアプリケーションを作るには APIs Console にアクセスしてClient ID for web applicationsを取得する。設定でRedirect URIsを https://<アプリケーションID>.appspot.com/auth/google/callback にしておく。secrets.py の GOOGLE_APP_ID, GOOGLE_APP_SECRET に取得した値を入れる。これらの値は厳重に管理すること。
Facebook でアプリケーションを作るには https://developers.facebook.com/apps にアクセスしてFacebookアプリ「Developer」をインストール後、Create New App から作成する。作成の際、携帯電話かクレジットカードで本人認証される。Softbank の iPhone を持っていたので、@softbank.ne.jpのSMSアドレスを入力して本人認証した。secrets.py の FACEBOOK_APP_ID, FACEBOOK_APP_SECRET に取得した値を入れる。これらの値は厳重に管理すること。