proglog

主にプログラミングに関する断片的メモ

[devel][gae][twitter] oauth認証の雰囲気

twitterで使う、OAuth認証のイメージ、概略、雰囲気、そんなもののメモ。
以前やったけどほとんど忘れたので。
用語はメチャクチャ。


自分が使ってるサービスのパスワードを渡さずに、サードパーティーアプリに読み書きなどの権限を与える仕組み。
大きく分けて2段階ある。
利用者とアプリのマッチングの認証、そして実際のapiアクセス。

  • twitterサーバ
  • これに連携したり、アドオンしたりするようなアプリケーション
  • 利用者

この三者

  1. 利用者は、アプリケーションを利用すること、つまり権限を与えることをtwitterサーバに伝える
  2. twitterサーバはそれを認証を示すコードを発行する
  3. 利用者はその認証コードをアプリケーションに渡す

これで完了。

もう少し具体的に。

  1. アプリケーションは、twitterアプリとして、自分をtwitterサーバに登録し、登録コードを取得する。
  2. 利用者は、アプリケーションの利用開始手続きをする。認証ボタンクリックとかそんな感じ。
  3. アプリケーションは、自分の登録コードをtwitterサーバに送り、 認証手続き開始をリクエストする。
  4. アプリケーションからのリクエストを受けたtwitterサーバは利用者に確認のページを提示する。まあ、アプリケーションが開いた新ウインドウがそこに遷移するか、新たにブラウザを立ち上げて表示することになる。
  5. 必要であればここで利用者twitterにログインする。そうでなければその利用しているブラウザでログイン状態にあるtwitterアカウントが対象になる。
  6. 利用者が確認OK、認証しますボタンを押すと、その認証を示すコードが発行される
  7. 利用者はその認証コードをアプリケーションに渡す。
  8. めでたく手続き完了。

上の文でアプリの登録コードに相当するのがConsumer key、Consumer secret。
認証コードがPINコード。

アプリなのにコンシューマーとはこれ如何に?
サーバからすれば、APIの消費者だからか。
また、なんで二つあるのかはよく知らない。
ただ、secretの方は、その名の通り秘密に。
どちらにしても、これ用のライブラリを使う時に、必要な変数に入れてやればいいだけ。

twitterのボットなどを作った場合、開発者としてのtwitterアカウントでhttps://dev.twitter.com/にアプリを登録し、そのアプリの利用者としてのtwitterアカウントでそのアプリを認証する、ってことになる。


で、利用者視点ではこれで終わりだけどアプリ側ではもう一つ。
apiへのアクセストークンというものを取得する必要がある。

  1. 認証コード(PINコード)を利用者からもらう
  2. それを使って、twitterサーバからアクセストークンを貰う
  3. apiアクセスするごとに、これをtwitterサーバに示す。

つまり、利用者との連携許可とtwitterサーバapiアクセス許可の二段構えになっている。

このトークンも二つあって、片っ方がsecret。
これもよく知らないけど、実際には使うライブラリの適当な変数にセットするだけ。

都合4つのkey、トークンを使ってtwitter-apiを使うことになる。

pythonでtweepyを使用する場合、アプリ登録より先の認証手続きは http://gitorious.org/tweepy/examples/blobs/master/oauth/getaccesstoken.py がやってくれる。
pinコード部分は自分の手でやるのはもちろんだけど。

で、使う時も取得したものをtweepyの変数にセットするだけ。
https://github.com/tweepy/tweepy


参考 もうPythonのマイクロフレームワーク「Flask」でもApp EngineのTwitter Botは15行じゃ書けない -


あれっアプリ登録者とアプリ利用者twitterアカウントが同一の時はPINコード部分はいらないのかな?
登録アプリのとこでアクセストークンが直接取得できるけど。