usakdsteen

ゆうさくですてぃーん

ついったあアピ、おうおうす、のメモ

雑なので間違ってるとこあるかもしれん

(Update: 2017-05-16 7:47 ... oauth_signatureの生成方法が完全に間違っていたのを修正)

 

 

https://dev.twitter.com/oauth/3-legged

3-leged OAuth

よく見かける認証(?)

 1. ツイッターから認証許可用トークン(リクエストークン)を貰う

 2.ユーザに認証許可用トークンを含むURLへアクセスしてもらい許可してもらう

 3.アクセストークンをゲット

 

(※受け取る認証許可用トークンもアクセストークンもパラメータ名はoauth_tokenと同じものになる(シークレットも同様))

 

1.認証許可用トークンの取得

https://dev.twitter.com/oauth/reference/post/oauth/request_token

APIを叩くと認証許可用トークンのoauth_tokenとoauth_token_secretを入手できる

request_tokenのAPIを叩くときにヘッダのAuthorizationに含める項目は

https://oauth.net/core/1.0/#auth_step1 あたりに大体説明が書いてある

oauth_nonce ... ランダムな英数字の文字列なら何でもいいらしいけど、推奨は32byteのランダムなデータをBASE64した文字列から英数字以外を削除したものがいいらしい

oauth_timestamp ... 1970/1/1からの秒数(所謂Unix時刻?) 現在時刻より少し大きめに取ればいいらしい

oauth_consumer_key ... TwitterのDeveloperページでアプリ申請時に貰うキーだと思う

oauth_signature_method ... シグネチャの暗号化方法の指定、HMAC-SHA1を指定する

oauth_version ... 1.0を指定ね

oauth_callback ... ここで指定したURLにアクセストークンが送信される、Webサービスなら専用サーバーを用意して受け取るか、アプリなら簡易サーバー立ててlocalhostへのコールバックで受け取るか、(※URLでなくoobの文字列を指定するとPIN認証というものになる)

 oauth_signature ... 上記の各種パラメータ名と値を"パラメータ名=値"とし&で連結した文字列を作りURLエンコードする(P)、"POST"と(URLエンコードしたAPIのURL)と(P)を&で連結した文字列をシグネチャ・ベースストリングとする、開発者としてのアプリ登録時のシークレットキーをURLエンコードしたものの末尾に&をつけた文字列をサイニング・キーとする、このベースストリングとキーを使いHMAC-SHA1でハッシュ化したものをBASE64で文字列にしたものをシグネチャとする( https://dev.twitter.com/oauth/overview/creating-signatures )

 

 

デスクトップアプリケーションの場合(?)

2.ユーザに認証許可用トークンを含むURLへアクセスしてもらい許可してもらう

3.アクセストークンをゲット

https://dev.twitter.com/oauth/reference/get/oauth/authorize

APIのパラメータに認証許可用トークンを指定してユーザにアクセスしてもらう

許可されるとrequest_tokenのoauth_callbackで指定したURLにリダイレクトされて

アクセストークンを取得できる

 

WebサービスでのログインにTwitter認証を使う場合(?)

2.ユーザに認証許可用トークンを含むURLへアクセスしてもらい許可してもらう

3.アクセストークンをゲット

 https://dev.twitter.com/oauth/reference/get/oauth/authenticate

APIのパラメータに認証許可用トークンを指定してユーザにアクセスしてもらう

が、WebサービスなのでURLリンクを表示するのでなくリダイレクトでAPIに直接飛ぶほうが早い

許可されるとrequest_tokenのoauth_callbackで指定したURLにリダイレクトされて

アクセストークンを取得できる

 

 

PIN認証

https://dev.twitter.com/oauth/pin-based

request_tokenのAPIoauth_callbackにoobの文字列を指定するとPIN認証になる

アプリでの認証に使われるらしい

 1. ツイッターから認証許可用トークン(リクエストークン)を貰う

 2.ユーザに認証許可用トークンを含むURLへアクセスしてもらい許可してもらう

 3.許可したときにブラウザに表示されるPINと呼ばれる数字をユーザにアプリへ入力してもらう

 4.PINの数字を使ってアクセストークンを取得する
 

1.と2.はcallbackの指定がoobなだけで前述のと手順は同じ

3.はアプリにPIN入力のUIを用意しとけばいいだけ

 

4.PINの数字を使ってアクセストークンを取得する

https://dev.twitter.com/oauth/reference/post/oauth/access_token

APIのoauth_verifierにPINの数字を指定して叩けばアクセストークンを取得できる

このAPIのレスポンスでユーザIDや表示名も取得になるぽい

 

 

 

アクセストークンを無事ゲットしたら

https://dev.twitter.com/oauth/overview/authorizing-requests

https://dev.twitter.com/oauth/overview/percent-encoding-parameters

https://dev.twitter.com/oauth/overview/creating-signatures

これらの説明に従ってOAuth認証で各種APIを叩けばよい

 

 

 

(ユーザ認証の必要ないデータの取得)

ツイッターの公開データにアプリからアクセスするためのアクセストークンの取得

アプリケーションオンリー認証というらしい

https://dev.twitter.com/oauth/application-only

https://dev.twitter.com/oauth/reference/post/oauth2/token

このAPIBASIC認証(OAuth認証ではない)で叩いて

それで得られたアクセストークンを使ってBearer認証(OAuth認証ではない)を使って各種APIを叩く