Twitter api v2でOAuth2.0認証でtweetする(OAuth 2.0 Authorization Code Flow with PKCE)
前提としてOAuth2.0の知識が必要です。
クライアントはconfidential clientsにします。
Developer Potalの設定変更
承認URL作成
URL
クエリパラメータ
| パラメータ | 値 | 備考 |
|---|---|---|
| response_type | code | 固定値 |
| client_id | xxxxxx | Developer Potal記載の値 |
| redirect_uri | https://twitter.com/ | Developer Potal記載の値 |
| scope | tweet.read tweet.write users.read | この3つ必要 |
| state | abc | 適当な値 |
| code_challenge | aaa | 適当な値 |
| code_challenge_method | plain | palin or s256 |
URL作成します。ここではplainにしていますが、s256のほうが良いようです。
認可エンドポイントへリクエスト(GET)
作成したURLをブラウザに貼り付けます。
「アプリにアクセスを許可」をクリックします。
URLバーに以下のように返ってくるので、codeの値(認可コード)を取得します。
https://twitter.com/home?state=abc&code=V01TOFF3aUx4aEFHcE11Y0VPS3o0bWJuM2VsOE8tSExxa2NDTjFjVGc5RlJxOjE2NTYyMjI2NDg1NDg6MTowOmFjOjE
太字部分が認可コードになります。
トークンエンドポイントへリクエスト(POST)
curlでポストします。クライアントタイプがconfidential clientsの為、Authorization: Basicのヘッダを追加します。(public clientsの場合、Authorizationヘッダが不要)
ヘッダに貼り付ける値は、以下のコマンドで取得します。Client ID、Client SecretはDeveloper Potalから取得します。
$ echo -n "<Client ID>:<Client Secret>" | \ openssl enc -e -base64 | \ tr -d '\r\n' WVxaVk1VZYUIazVXTkhVNWNTYlhObmRZZDNFNk1UcGphUTpyVjNVBNxKdUdMR0d2ejlUSjBtYUdBSzJVRnhpc3Frc29uU2JpOGU5S547SDAtSXY6RQ==
この値をAuthorization: Basicヘッダに含めます。
curlコマンドは以下のようになります。
| パラメータ | 値 | 備考 |
|---|---|---|
| grant_type | authorization_code | 固定値 |
| client_id | xxxxxx | Developer Potal記載の値 |
| redirect_uri | https://twitter.com/ | Developer Potal記載の値 |
| code | 認可コード | ブラウザレスポンスで取得した認可コード |
| code_verifier | aaa | 承認URL作成時のcode_challengeの値 |
curl --request POST "https://api.twitter.com/2/oauth2/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic WVxaVk1VZYUIazVXTkhVNWNTYlhObmRZZDNFNk1UcGphUTpyVjNVBNxKdUdMR0d2ejlUSjBtYUdBSzJVRnhpc3Frc29uU2JpOGU5S547SDAtSXY6RQ==" \ --data-urlencode "code=V01TOFF3aUx4aEFHcE11Y0VPS3o0bWJuM2VsOE8tSExxa2NDTjFjVGc5RlJxOjE2NTYyMjI2NDg1NDg6MTowOmFjOjE" \ --data-urlencode "grant_type=authorization_code" \ --data-urlencode "client_id=<Client ID>" \ --data-urlencode "redirect_uri=https://twitter.com/" \ --data-urlencode "code_verifier=aaa"
レスポンスにaccess_tokenが返ってくるので、こちらの値をBearerトークンとして保持します。
{
"token_type":"bearer",
"expires_in":7200,
"access_token":"SV9uYTRMN1o5bVdkWGdwM3J3eHVkMkVEeTFCbmhhNERYZnpHSmJnTU0yWmg1OjE2NTYyMjQ2NTI2MDE6MTowOmF0OjE",
"scope":"tweet.write users.read tweet.read"
}
メッセージ送信(Tweet)
TweetするAPIを使用してTweetしてみます。
このAPIではtweet.read,tweet.write,users.readのスコープが必要とのことです。
textオプションで指定した文字列でTweetします。
curl --request POST "https://api.twitter.com/2/tweets" \
-H "Authorization: Bearer <Bearerトークン>" \
-H "Content-type: application/json" \
-d '{"text": "aba"}'
tweetできました。
参考サイト




KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^






コメント