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_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のほうが良いようです。

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_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してみます。

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アカウントは取得しているものとし...
RFC 2617: HTTP Authentication: Basic and Digest Access Authentication
This document provides the specification for HTTP's authentication framework, the original Basic authentication scheme a...

コメント

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