Twitter api v2でOAuth2.0認証でtweetする(OAuth 2.0 Authorization Code Flow with PKCE)

Twitter api v2でOAuth2.0認証でtweetする(OAuth 2.0 Authorization Code Flow with PKCE)

前提としてOAuth2.0の知識が必要です。

クライアントはconfidential clientsにします。

Developer Potalの設定変更

Twitter api v2でOAuth2.0認証(PKCE)してtweetする

Twitter api v2でOAuth2.0認証(PKCE)してtweetする

承認URL作成

URL
https://twitter.com/i/oauth2/authorize
クエリパラメータ
パラメータ備考
response_typecode固定値
client_idxxxxxxDeveloper Potal記載の値
redirect_urihttps://twitter.com/Developer Potal記載の値
scopetweet.read tweet.write users.readこの3つ必要
stateabc適当な値
code_challengeaaa適当な値
code_challenge_methodplainpalin or s256

URL作成します。ここではplainにしていますが、s256のほうが良いようです。

https://twitter.com/i/oauth2/authorize?response_type=code&client_id=xxxxxx&redirect_uri=https://twitter.com/&scope=tweet.read%20tweet.write%20users.read&state=abc&code_challenge=aaa&code_challenge_method=plain

認可エンドポイントへリクエスト(GET)

作成したURLをブラウザに貼り付けます。

Twitter api v2でOAuth2.0認証(PKCE)してtweetする

「アプリにアクセスを許可」をクリックします。

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_typeauthorization_code固定値
client_idxxxxxxDeveloper Potal記載の値
redirect_urihttps://twitter.com/Developer Potal記載の値
code認可コードブラウザレスポンスで取得した認可コード
code_verifieraaa承認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してみます。

POST /2/tweets

この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"}'

Twitter api v2でOAuth2.0認証(PKCE)してtweetする

tweetできました。

参考サイト

OAuth 2.0 Making requests on behalf of users
OAuth2.0の流れをまとめてみる
Twitter API v2 を使ってツイートしてみた
Twitter API の検証をしていて、すんなりとツイートできなかったので手順を覚書Windows10 のコマンドプロンプトから curl を使って実行していますTwitterアカウントとDeveloperアカウントは取得しているものとしますDeveloper アカウントからプロジェクトを作成し、Keys and t...
RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication
HTTP Authentication: Basic and Digest Access Authentication (RFC 2617)

コメント

タイトルとURLをコピーしました