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(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント