メインコンテンツへスキップ

App only 認証と OAuth 2.0 Bearer Token

X では、特定のユーザーではなくアプリケーション自体に代わって認証済みリクエストを発行する機能をアプリケーションに提供しています。X の実装は、OAuth 2 specificationClient Credentials Grant フローに基づいています。 アプリケーションのみの認証はユーザーコンテキストを含まず、アプリケーションが自らの名義で API リクエストを行う認証方式です。この方法は、公開情報への読み取り専用アクセスだけが必要な開発者向けです。  アプリケーションのみの認証は、App の consumer API keys を使用するか、App only Access Token(Bearer Token)を使用して行うことができます。これは、X API に対して行えるリクエストが、認証済みユーザーを必要としないものに限定されることを意味します。 アプリケーションのみの認証では、次のような操作を実行できます:
  • ユーザーのタイムラインを取得
  • 任意のアカウントの友人およびフォロワーにアクセス
  • List リソースにアクセス
  • Tweet を検索
なお、ユーザーに代わってリクエストを発行するには、PKCE を伴う OAuth 1.0a または OAuth 2.0 Authorization Code Flow のいずれかが必要です。API reference ページには、各 API の利用に必要な認証方法が記載されています。次を実行するには、access token を用いたユーザー認証(ユーザーコンテキスト)が必要です:
  • Tweet またはその他のリソースを Post
  • ユーザーを検索
  • 任意の geo endpoint を使用
  • ダイレクトメッセージまたはアカウント資格情報にアクセス
  • ユーザーのメールアドレスを取得

認証フロー

この方法を利用するには、App only Access TokenBearer Tokenとも呼ばれます)が必要です。consumer key と secret を POST oauth2/token endpoint に渡すことで、App only Access Token(Bearer Token)を発行できます。  アプリケーション専用の認証フローは次の手順で行われます。
  • アプリケーションは consumer key と secret を、特別な方式でエンコードした認証情報に変換します。
  • アプリケーションは POST oauth2/token endpoint にリクエストを送り、これらの認証情報と引き換えに App only Access Token を取得します。
  • REST API にアクセスする際、アプリケーションは認証のために App only Access Token を使用します。
リクエストに署名する必要がないため、この方式は標準的な OAuth 1.0a モデルよりもはるかに簡素です。

アプリケーションのみ認証について

トークンはパスワードです consumer key と secret、および App only Access Token(Bearer Token)自体は、アプリケーションとしてリクエストを行うためのアクセス権を付与します。これらの値はパスワードと同等の機密情報として扱い、信頼できない第三者と共有・配布してはなりません。 SSL が必須 すべてのリクエスト(トークンの取得・使用の両方)は、必ず HTTPS の endpoint を使用する必要があります。Connecting to X API using TLS に記載のベストプラクティスに従ってください。ピア検証は常に実施する必要があります。 ユーザーコンテキストなし アプリケーションのみ認証でリクエストを送信する場合、「現在のユーザー」という概念はありません。したがって、POST statuses/update のような endpoint はアプリケーションのみ認証では機能しません。ユーザーを代表してリクエストを発行する方法については、using OAuth を参照してください。 レート制限 アプリケーションには 2 種類のレート制限プールがあります。 access token を用いたユーザー(ユーザーコンテキスト)を代表して行うリクエストは、アプリケーションのみ認証で使用されるものとは異なるレート制限の枠から消費されます。つまり、ユーザーを代表して行うリクエストは app-only auth のレートリミットを消費せず、app-only auth によるリクエストはユーザーベースの認証でのレートリミットを消費しません。 API Rate Limiting の詳細をご確認のうえ、制限を確認 してください。

アプリケーションのみリクエストの発行

ステップ 1: consumer key と secret をエンコードする アプリケーションの consumer key と secret を、Bearer Token を取得するためのクレデンシャルにエンコードする手順は次のとおりです。
  1. RFC 1738 に従って consumer key と consumer secret を URL エンコードします。執筆時点では実際には consumer key と secret は変化しませんが、将来的に値の形式が変わる可能性に備え、この手順は実施してください。
  2. エンコード済みの consumer key、コロン文字「:」、エンコード済みの consumer secret を連結し、1 つの文字列にします。
  3. 前のステップで得た文字列をBase64 エンコードします。
以下は、このアルゴリズムの結果例です。このページで使用している consumer secret はテスト用であり、実際のリクエストでは機能しない点に注意してください。
Consumer keyxvz1evFS4wEEPTGEFPHBog
Consumer secretL8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
RFC 1738 エンコード済み consumer

key(変更なし)
xvz1evFS4wEEPTGEFPHBog
RFC 1738 エンコード済み consumer

secret(変更なし)
L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Bearer Token クレデンシャルxvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Base64 エンコード済み Bearer Token クレデンシャル:: eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
ステップ 2: App only Access Token(Bearer Token)を取得する ステップ 1 で算出した値は、POST oauth2/token にリクエストを送信して App only Access Token と交換する必要があります。
  • リクエストは HTTP POST である必要があります。
  • リクエストには Authorization ヘッダーを含め、値は Basic <base64 encoded value from step 1>. とします。
  • リクエストには Content-Type ヘッダーを含め、値は application/x-www-form-urlencoded;charset=UTF-8. とします。
  • リクエストのボディは grant_type=client_credentials とします。
リクエスト例(Authorization ヘッダーは折り返しています):
POST /oauth2/token HTTP/1.1
Host: api.x.com
User-Agent: My X App v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip

grant\_type=client\_credentials
リクエストが正しい形式で送信されていれば、サーバーはJSONでエンコードされたペイロードを返します。 応答例:
HTTP/1.1 200 OK
Status: 200 OK
Content-Type: application/json; charset=utf-8
...
Content-Encoding: gzip
Content-Length: 140

{"token\_type":"bearer","access\_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
アプリケーションは、返却されたオブジェクトの token_type キーに対応する値が bearer であることを確認してください。access_token キーに対応する値が、App only Access Token(Bearer Token)です。 1 つの App only Access Token は、同時に 1 つのアプリケーションに対してのみ有効である点に注意してください。同じ認証情報で /oauth2/token に再度リクエストすると、無効化されるまで同じトークンが返されます。 ステップ 3: App only Access Token(Bearer Token)で API リクエストを認証する App only Access Token(Bearer Token)は、アプリケーション専用認証をサポートする API endpoint へのリクエストに使用できます。App Access Token を使用するには、通常の HTTPS リクエストを作成し、Authorization ヘッダーに Bearer <base64 bearer token value from step 2>. Signing is not required. の値を設定してください。 リクエスト例(Authorization ヘッダーは折り返して表示):
GET /1.1/statuses/user\_timeline.json?count=100&screen\_name=twitterapi HTTP/1.1
Host: api.x.com
User-Agent: My X App v1.0.23
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAA
                      AAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Accept-Encoding: gzip
App only Access Token(Bearer Token)の無効化 App only Access Token が漏えいした場合や、何らかの理由で無効化する必要がある場合は、POST oauth2/invalidate_token を呼び出してください。 リクエスト例(Authorization ヘッダーは改行しています):
POST /oauth2/invalidate_token HTTP/1.1
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
User-Agent: My X App v1.0.23
Host: api.x.com
Accept: */*
Content-Length: 119
Content-Type: application/x-www-form-urlencoded

access_token=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
レスポンス例:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 127
...

{"access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAAAAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}

よくあるエラーケース

このセクションでは、Bearer Token の取得手続きおよび利用時に発生しがちな誤りについて説明します。ここに記載していないエラー応答もあるため、ハンドリングしていないエラーコードやレスポンスには注意してください。 App only Access Token の取得または失効に対する無効なリクエスト 次の場合:
  • 無効なリクエストで App only Access Token (Bearer Token) を取得しようとした(例: grant_type=client_credentials を省略した)。
  • 誤った、または有効期限切れのアプリ資格情報で App only Access Token (Bearer Token) を取得または失効しようとした。
  • 誤った、またはすでに失効した App only Access Token (Bearer Token) を無効化しようとした。
  • 短時間に過度な頻度で App only Access Token (Bearer Token) を取得しようとした。
次の結果となります:
HTTP/1.1 403 Forbidden
Content-Length: 105
Content-Type: application/json; charset=utf-8
...

{"errors":\[{"code":99,"label":"authenticity\_token\_error","message":"認証情報を確認できません"}\]}

API リクエストに無効な App only Access Token(Bearer Token)が含まれている

誤った、または失効した Access Token を使用して API リクエストを送信すると、次の結果になります:
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Content-Length: 61
...

{"errors":[{"message":"無効または期限切れのトークン","code":89}]}

application-only 認証をサポートしていない endpoint で使用された App only Access Token (Bearer Token)

ユーザー context を必要とする endpoint(statuses/home_timeline など)に App only Access Token (Bearer Token) でリクエストすると、次のようになります:
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8
Content-Length: 91
...

{"errors":\[{"message":"お客様の認証情報では、このリソースへのアクセスが許可されていません","code":220}\]}
I