目次
Webの画面を持たないCUIのツールなどは、リダイレクトでAccess Token
を受け取る事ができません。
この様なケースでは、PIN-based authorizationという仕組みを使用することで、Access Token
を取得する事ができます。
この記事では、Twitter OAuthのAccess Token
をリダイレクト無しで取得する方法を解説します。
自作のツールを複数のアカウントで使用したい場合などに活用できると思います。
ちなみに、この先登場するトークン3種類を整理しておくと、Consumer API Key
はアプリ毎に発行されるトークン。Access Token
(アクセストークン)はユーザ毎に発行されるトークン。リクエストトークン
やoauth_token
は、アクセストークン発行リクエストに必要なトークンとなります。
CLIツールを作成しました🎉
解説の前にツールを紹介させて下さい。(仕組みは何でもいいからさっさとアクセストークンが欲しい!という方はこちらをご利用下さい。)
簡単にAccess Token
を生成できるCLIツールを作成しました。
以下のコマンドで実行できます。
なお、実行するにはdockerが必要です。
docker run --rm -i tkuni83/twitter-oauth-token-resolver
プロンプトに従ってConsumer API Key
やPIN code
を入力すれば、Access Token
が取得できます。

PIN-based authorizationについて
OAuthのプロセスの内、リダイレクト先となる画面を持たないアプリケーションでOAuthを利用するための仕組み。
リダイレクトの替わりにPIN code
が発行される。
詳細はコチラ
PIN-based authorizationを試してみる。
PHPで試してみます。
署名の生成が面倒なのでtwitteroauthというライブラリを使います。$connection->oauth("oauth/request_token")
でOAuth認可プロセスを開始します。oauth_callback
というパラメータにoob
を指定する事でPINベースのOAuth認可になります。
$connection = new TwitterOAuth($apiKey, $apiSecretKey); $result = $connection->oauth("oauth/request_token", [ "oauth_callback" => "oob" ]); $oauthToken = $result['oauth_token']; // リクエストトークン(一時トークン) $oauthTokenSecret = $result['oauth_token_secret']; // リクエストトークン(一時トークン)シークレット
リクエストトークンを付与したURLを生成&表示してユーザに承認を促します。
遷移先の画面で承認するとPIN code
が発行されます。
$url = "https://api.twitter.com/oauth/authorize?oauth_token=${oauthToken}";
最後に、$connection->oauth("oauth/access_token")
にPIN code
を渡してAccess Token
を取得します。
$connection = new TwitterOAuth($apiKey, $apiSecretKey, $oauthToken, $oauthTokenSecret); $result = $connection->oauth("oauth/access_token", [ "oauth_verifier" => $pinCode ]); $accessToken = $result['oauth_token']; // アクセストークン $accessTokenSecret = $result['oauth_token_secret']; // アクセストークンシークレット
以上です!🤙
Webエンジニアをやっています
UX/UIデザインからプログラミング、DB設計、SEO、インフラ構築など幅広く対応してます
PHP/PHPUnit/Laravel/Vue/Nuxt/Docker/Terraform
ご連絡はTwitterのDMまで。