クライアント資格情報フロー
基本
アプリケーション自体に代わって承認を行います。
チャットボットなど、自分自身に代わってアクションを実行するサーバー側アプリケーションに適しています。
クライアント資格情報フローでは、アプリケーションは
client_id
およびclient_secret
を送信することで Space からアクセストークンを受け取ります。アプリケーションで Space SDK を使用する場合は、
SpaceHttpClient().withServiceAccountTokenSource()
メソッドを利用してフローを実装できます。クライアント資格情報フローを使用してすべての操作にアクセスできるわけではありません。多くのアクション (記事の下書きの投稿など) にはユーザーの同意が必要であり、アプリケーションの資格情報では実行できません。ユーザーに代わって実行する必要があるアクションについては、他の認可フロー (例: リソース所有者のパスワード認証情報フロー ) を使用します。
フローの詳細については、クライアント認証情報フローの仕様(英語)を参照してください。
実装方法
アプリケーションは、client_id
および client_secret
を送信して、Space からのアクセストークンを要求します。SpaceHttpClient
クラスは、クライアント資格情報フローを操作するための withServiceAccountTokenSource
メソッドを提供します。例:
リクエスト
Space からアクセストークンを取得するには、アプリケーションはトークンエンドポイント <Space service URL>/oauth/token
にリクエストを行う必要があります。client_id
および client_secret
を提供するには、Basic
コンテンツを持つ Authorization
ヘッダーを使用します。
- client_id
必須。クライアントアプリケーションを Space に登録するときに割り当てられる ID。クライアント ID を取得するには、
に移動し、リストからアプリケーションを選択します。
- client_secret
必須。クライアントアプリケーションを Space に登録するときに割り当てられるプライベート ID。クライアントシークレットを取得するには、
に移動し、リストからアプリケーションを選択します。
UTF-8 文字エンコーディングの application/x-www-form-urlencoded
形式の HTTP リクエストのエンティティボディに次のパラメーターを追加します。以下の例を参照してください。
- grant_type
必須。OAuth 2.0 リクエストの許可タイプを指定します。値を
client_credentials
に設定します。- 範囲
オプション。Space 内の特定のリソースにアクセスするために必要な権限の Space 区切りのリスト。
Authorization
ヘッダーは次の形式である必要があります。
Authorization: Basic <base64(client_id + ":" + client_secret)>
区切り文字としてセミコロンを使用し、Base64 形式にエンコードする(英語)を使用して、client_id
と client_secret
を 1 つの文字列に結合します。
例:
リクエストが有効な場合、Space はアプリケーションを認証します。
レスポンス
アクセストークンリクエストが有効で承認されている場合、Space はアクセストークンとオプションのリフレッシュトークンを発行します。HTTP 応答のエンティティ本文に次のパラメーターを 200 (OK) ステータスコードとともに追加して、応答を構築します。
パラメーター | 説明 |
---|---|
access_token | Space が発行するアクセストークン。 |
token_type | Space が発行するトークンの種類。値は大文字と小文字が区別されません。 |
expires_in | アクセストークンの有効期間(秒単位)。例: 値「3600」は、応答が生成されてから 1 時間でアクセストークンが期限切れになることを示します。 |
範囲 | アプリケーションによって要求されたスコープと同じ場合はオプション。それ以外の場合は必須。Space 内の特定のリソースにアクセスするために必要な権限の Space 区切りのリスト。 |
パラメーターは、「application/json」メディア型を使用して HTTP 応答の entity-body
に含まれます。各パラメーターを最上位の構造レベルで追加することにより、パラメーターは JSON 構造にシリアル化されます。パラメーター名と文字列値は JSON 文字列として含まれます。数値は JSON 数値として含まれます。パラメーターの順序は重要ではなく、変更することもできます。
Space には、トークン、資格情報、その他の機密情報を含む応答内の値が「no-store」である HTTP 「Cache-Control」応答ヘッダーフィールドと、値が「no」である「Pragma」応答ヘッダーフィールドが含まれます。- キャッシュ "。
例:
エラー
リクエストがアプリケーション認証に失敗した場合、または無効な場合、Space は HTTP 400 (間違った要求) ステータスコードで応答し (特に指定されていない限り)、応答には次のパラメーターが含まれます。
- エラー
以下からの単一の ASCII [USASCII] エラーコード:
invalid_request
— リクエストに必須のパラメーターが欠落している、サポートされていないパラメーター値(許可型以外)が含まれている、パラメーターが繰り返されている、複数の資格情報が含まれている、アプリケーションを認証するために複数のメカニズムを利用している、またはその他の形式が不正です。invalid_client
— アプリケーション認証に失敗しました (例: 不明なアプリケーション、アプリケーション認証が含まれていない、サポートされていない認証方法)。Space は、どの HTTP 認証スキームがサポートされているかを示すために、HTTP 401 (Unauthorized) ステータスコードを返す場合があります。アプリケーションが「Authorization」リクエストヘッダーフィールドを介して認証を試みた場合、Space サーバーは HTTP 401 (Unauthorized) ステータスコードで応答し、アプリケーションで使用される認証スキームと一致する「WWW-Authenticate」レスポンスヘッダーフィールドを含めます。invalid_grant
— 提供された認可付与 (認可コード、リソース所有者の資格情報など) またはリフレッシュトークンが無効であるか、期限切れであるか、取り消されているか、認可リクエストで使用されたリダイレクト URI と一致しないか、別のアプリケーションに発行されました。unauthorized_client
— 認証されたアプリケーションには、この認可付与タイプを使用する権限がありません。unsupported_grant_type
— 認可付与タイプは、Space ではサポートされていません。invalid_scope
— 要求されたスコープが無効、不明、不正な形式であるか、リソース所有者によって付与されたスコープを超えています。
- error_description
人間が判読できる ASCII [USASCII] テキストは、アプリケーション開発者が何が課題になったのかを理解するのに役立つ追加情報を提供します。
パラメーターは、「application/json」メディア型を使用して HTTP レスポンスのエンティティ本体に含まれます。パラメーターは、最上位の構造レベルで各パラメーターを追加することにより、JSON 構造にシリアル化されます。パラメーター名と文字列値は JSON 文字列として含まれています。数値は JSON 番号として含まれています。パラメーターの順序は重要ではなく、変化する可能性があります。
例:
関連ページ:
![](https://pleiades.io/icons/jetbrains_logo.png)
リソース所有者のパスワード認証情報フロー
基本:Space ユーザーに代わって承認を行います。アプリケーションが知っている資格情報をユーザー (リソース所有者) に代わってリソースにアクセスするアプリケーションに適しています。アプリケーションは、たとえば、デバイスのオペレーティングシステムや高度な特権を持つアプリケーションなどです。通常、アプリケーションは対話型フォームを介してユーザーの Space 認証情報 (ユーザー名とパスワード) を取得します。次に、アプリケーションはこれらの認証情報を使用して、ユーザーに代わって Space...
![](https://resources.jetbrains.com/help/img/space/app_channel_permissions_request.png)
権限のリクエスト
特定の Space エンドポイントにアクセスするには、アプリケーションはまず対応するアクセス許可を取得する必要があります。例: アプリケーションがプロジェクトの課題を作成する場合、アプリケーションには課題の作成権限が必要です。課題の詳細を表示するには、課題を表示する権限が必要です。アプリケーションに必要な権限のセット全体は、権限スコープと呼ばれます。アプリケーションがアクセス許可を要求する方法は、アプリケーション自体の代わりに動作するアプリケーションと、Space ユーザーの代わりに動作するアプ...