TwitterのPINを利用したOAuthでtokenもらう

いつも忘れるのでメモ。

consumer_key consumer_secret を利用して https://api.twitter.com/oauth/request_token へリクエストする。

method: POST

Headers: Authentication: OAuth oauth_consumer_key="<key>",oauth_signature_method="HMAC-SHA1",oauth_timestamp="<unixepoctime>",oauth_nonce="<randomstring>",oauth_verson="1.0",oauth_callback="oob",oauth_signature="<signature>

param: oauth_verifier=oob

ここでsignature は HMAC-SHA1 で作る。 鍵は <consumer_secret>& データはmethod, url, oauth paramとparamをキーで昇順ソートしたもの をそれぞれURLエンコードencoded_method&encoded_url&encoded_paramのようにしたもの。 さらに作ったsignatureはURLエンコードする。

認証用のoauth_token, oauth_token_secret がもらえるので

https://api.twitter.com/oauth/authorize?oauth_token=<token> へ接続し、Authorize appボタンを押すとPINがもらえる。

method: GET

https://api.twitter.com/oauth/access_token へ oauth_token, oauth_secret, PIN を利用してリクエストする。

method: POST

Headers: Authentication: OAuth oauth_consumer_key="<key>",oauth_signature_method="HMAC-SHA1",oauth_timestamp="<unixepoctime>",oauth_nonce="<randomstring>",oauth_verson="1.0",oauth_callback="oob",oauth_signature="<signature>,oauth_token="<token>"

param: oauth_verifier=<PIN>

oauth_tokenとoauth_token_secretがあるので、これを利用する。 signature は鍵が <consumer_secret>&<oauth_token_secret>になる。

ユーザの oauth_token, oauth_token_secret が手に入る。最初にもらったoauth_token,oauth_token_secretはユーザ認証用なのでもういらない。

以後はユーザのtokenとアプリのconsumerキーでリクエストの度に上記のようなことをやる。