PKCE を使用した OAuth 2.0 Authorization Code Flow でエンドポイントに接続する方法
エンドポイントに接続する方法
ユーザーを認証するには、アプリで認可フローを実装する必要があります。この認可フローにより、X 上の認可ダイアログにユーザーを誘導できます。ここで、X の主要なエクスペリエンスが認可ダイアログを表示し、アプリに代わって認可を処理します。ユーザーは、アプリを認可するか、または権限を拒否できます。ユーザーが選択を行った後、X はユーザーをアプリにリダイレクトします。そこで、認可コードを access token と交換したり (ユーザーがアプリを認可した場合)、拒否を処理したり (ユーザーがアプリを認可しなかった場合) できます。confidential client の利用
confidential client を利用する場合、トークンエンドポイントへのリクエストを行う際、base64 エンコーディングで認可ヘッダーを生成する basic 認証 スキームを使用する必要があります。userid と password は、認証情報の base64 エンコード済み文字列内で 1 つのコロン (”:”) 文字で区切られます。
例は次のようになります:
-header 'Authorization: Basic V1ROclFTMTRiVWhwTWw4M2FVNWFkVGQyTldNNk1UcGphUTotUm9LeDN4NThKQThTbTlKSXQyZm1BanEzcTVHWC1icVozdmpKeFNlR3NkbUd0WEViUA=='
ユーザーエージェントが Client ID「Aladdin」とパスワード「open sesame」を送信したい場合、次のヘッダーフィールドを使用します:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
basic authorization ヘッダーを作成するには、Developer Console 内のアプリの「Keys and Tokens」ページから取得できる Client ID と Client Secret を base64 エンコードする必要があります。
OAuth 2.0 で接続する手順
ステップ 1: Authorize URL を構築する アプリは、認可を必要とするスコープを示す authorize URL を X 向けに構築する必要があります。例えば、アプリで投稿とユーザーの参照、フォローの管理が必要な場合、以下のスコープをリクエストする必要があります:tweet.read%20users.read%20follows.read%20follows.write
URL には、他の必須パラメーターに加えて、code_challenge と state パラメーターも含める必要があります。本番環境では、code_challenge にはランダムな文字列を使用してください。
ステップ 2: GET oauth2/authorize
ユーザーに認証を行わせ、アプリケーションに authorization code を送信させます。アプリで OAuth 2.0 を有効にしている場合、アプリの「Keys and Tokens」ページ内で Client ID を確認できます。
ユーザーをリダイレクトさせる URL の例は次のようになります:
redirect_uri は auth_code パラメーターを含むリクエストを受け取ります。アプリケーションは state パラメーターを検証する必要があります。
クライアントからのリダイレクトのリクエスト例:
offline.access スコープがリクエストされている場合のみ) refresh token を作成できます。以下のエンドポイントに POST リクエストを行うことができます:
Content-Type を application/x-www-form-urlencoded として渡す必要があります。また、リクエストには code、grant_type、client_id、redirect_uri、および code_verifier を含める必要があります。
public client のトークンリクエストの例は次のとおりです:
Content-Type を application/x-www-form-urlencoded として追加する必要があります。加えて、refresh_token を渡し、grant_type を refresh_token に設定し、client_id を定義する必要があります。
このリクエストは public client で動作します:
Content-Type を application/x-www-form-urlencoded として渡し、トークンと client_id を含める必要があります。
場合によっては、ユーザーがアプリに付与したアクセスを取り消したいことがあります。ユーザーは connected Apps ページ を訪問することでアクセスを取り消せます。