目次
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まで。
