OAuthでRequest tokenの取る
twitterの公式のドキュメントを見ながらOAuthを突いてみたけど、
oauth_signatureを作るのにえらい悩んだのでその備忘録。
事の発端になったtwitterのサイト
Authenticating Requests with OAuth
登場するもの
base string
送信するパラメータなどの一式を以下の擬似コードの様につなげたもの。
ただし、oauth_tokenとoauth_token_secretは含まない。
httpMethod + "&" +
url_encode( base_uri ) + "&" +
sorted_query_params.each { | k, v |
url_encode ( k ) + "%3D" +
url_encode ( v )
}.join("%26")
composite signing key
<consumerSecret>&<tokenSecret>
※:ただし、tokenSecretは発行されるまではブランク
oauth_signature
base stringをcomposite signing keyでサインしたもの。
サインの方法はいろいろあるようだけど、今回はHMAC-SHA1を使用した。
oauth_signatureの作り方
basestringの準備
以下のものを組み合わせて作る。
・httpMethod : POSTやGET
・ベースのURL
・oauth_callback : コールバック先のURL
・oauth_consumer_key : 自分のコンシューマキー
・oauth_nonce : 乱数のワンタイムパスワード
・oauth_signature_method : oauth_signatureの方法
・oauth_timestamp%3D1272323042%26
・oauth_version%3D1.0
こんな感じの文字列になる。
POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A3005%252Fthe_dance%252Fprocess_callback%253Fservice_provider_id%253D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0
oauth_signatureを作成する
上記のbase_stringにサインする。
Linuxのコマンドでやるとこんな感じ。
echo -n <base_string> | openssl dgst -sha1 -binary -hmac <composite signing key> | base64
実際に実行すると、こんな感じの文字列になる。
$ echo -n 'POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A3005%252Fthe_dance%252Fprocess_callback%253Fservice_provider_id%253D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0' | openssl dgst -sha1 -binary -hmac 'MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&' | base64
8wUi7m5HFQy76nowoCThusfgB+Q= ←これがoauth_signature
というわけでoauth_signatureとして「8wUi7m5HFQy76nowoCThusfgB+Q=」が作成できました。
Request tokenを取得する
上記で取得したoauth_signature含めた文字列を
ヘッダのAuthorizationに入れて使ってリクエストを投げると
oauth_token、oauth_token_secret、oauth_callback_confirmedが返ってくる、、、らしい。
今日はできなかったのでここまで。
OAuth oauth_nonce="QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk", oauth_callback="http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1272323042", oauth_consumer_key="GDdmIQH6jhtmLUypg82g", oauth_signature="8wUi7m5HFQy76nowoCThusfgB%2BQ%3D", oauth_version="1.0"
]]>