JetBrains Space ヘルプ

クライアント資格情報フロー

基本

  • アプリケーション自体に代わって承認を行います。

  • チャットボットなど、自分自身に代わってアクションを実行するサーバー側アプリケーションに適しています。

  • クライアント資格情報フローでは、アプリケーションは client_id および client_secret を送信することで Space からアクセストークンを受け取ります。

  • アプリケーションで Space SDK を使用する場合は、SpaceHttpClient().withServiceAccountTokenSource() メソッドを利用してフローを実装できます。

  • クライアント資格情報フローを使用してすべての操作にアクセスできるわけではありません。多くのアクション (記事の下書きの投稿など) にはユーザーの同意が必要であり、アプリケーションの資格情報では実行できません。ユーザーに代わって実行する必要があるアクションについては、他の認可フロー (例: リソース所有者のパスワード認証情報フロー ) を使用します。

フローの詳細については、クライアント認証情報フローの仕様(英語)を参照してください。

実装方法

アプリケーションは、client_id および client_secret を送信して、Space からのアクセストークンを要求します。SpaceHttpClient クラスは、クライアント資格情報フローを操作するための withServiceAccountTokenSource メソッドを提供します。例:

// URL of your Space instance const val spaceUrl = "https://mycompany.jetbrains.space" // 'clientId' and 'clientSecret' are issued when you // [[[register the application|https://www.jetbrains.com/help/space/register-app-in-space.html#specify-authentication-options]]] in Space // or when the application is installed to Space by a user val clientId = System.getenv("JB_SPACE_CLIENT_ID") val clientSecret = System.getenv("JB_SPACE_CLIENT_SECRET") // Create a base Space client val baseClient = SpaceHttpClient(HttpClient()) // Make a request. // The "**" arg defines the [[[scope|https://www.jetbrains.com/help/space/authentication-a.html#scopes]]] val spaceClient = baseClient.withServiceAccountTokenSource( clientId, clientSecret, spaceUrl, "**") val absences = spaceClient.absences.getAllAbsences()

リクエスト

Space からアクセストークンを取得するには、アプリケーションはトークンエンドポイント <Space service URL>/oauth/token にリクエストを行う必要があります。client_id および client_secret を提供するには、Basic コンテンツを持つ Authorization ヘッダーを使用します。

client_id

必須。クライアントアプリケーションを Space に登録するときに割り当てられる ID。クライアント ID を取得するには、administration.png 管理→ アプリケーションに移動し、リストからアプリケーションを選択します。

client_secret

必須。クライアントアプリケーションを Space に登録するときに割り当てられるプライベート ID。クライアントシークレットを取得するには、administration.png 管理→ アプリケーションに移動し、リストからアプリケーションを選択します。

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_idclient_secret を 1 つの文字列に結合します。

例:

POST /oauth/token Host: mycompany.jetbrains.space Authorization: Basic dmFsaWQtc2VydmljZS1pZDp2YWxpZC1zZXJ2aWNlLXNlY3JldA== Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&scope=**

リクエストが有効な場合、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」応答ヘッダーフィールドが含まれます。- キャッシュ "。

例:

HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "token_type": "Bearer", "expires_in": 600, "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzNThlMDRlOS1jNDc1LTRkNGUtOGM4OS1lODA3ZTQxNjk3MmMiLCJhdWQiOiIzNThlMDRlOS1jNDc1LTRkNGUtOGM4OS1lODA3ZTQxNjk3MmMiLCJvcmdEb21haW4iOiJqZXRicmFpbnMudGVhbSIsInNjb3BlIjoiKioiLCJuYW1lIjoiTXkgU2VydmljZSIsImlzcyI6Imh0dHBzOi8vamV0YnJhaW5zLnRlYW0iLCJwcmluY2lwYWxfdHlwZSI6IlNFUlZJQ0UiLCJleHAiOjE1NjQ1MDU0MzAsImlhdCI6MTU2NDUwNDgzMH0._1uLmGWUfeG52p4_LcLdZN29at14CGG_RE4KusWY34A", "refresh_token": null, "scope": "**" }

エラー

リクエストがアプリケーション認証に失敗した場合、または無効な場合、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 番号として含まれています。パラメーターの順序は重要ではなく、変化する可能性があります。

例:

HTTP/1.1 400 Bad Request Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "error":"invalid_request" }

関連ページ:

リソース所有者のパスワード認証情報フロー

基本:Space ユーザーに代わって承認を行います。アプリケーションが知っている資格情報をユーザー (リソース所有者) に代わってリソースにアクセスするアプリケーションに適しています。アプリケーションは、たとえば、デバイスのオペレーティングシステムや高度な特権を持つアプリケーションなどです。通常、アプリケーションは対話型フォームを介してユーザーの Space 認証情報 (ユーザー名とパスワード) を取得します。次に、アプリケーションはこれらの認証情報を使用して、ユーザーに代わって Space...

権限のリクエスト

特定の Space エンドポイントにアクセスするには、アプリケーションはまず対応するアクセス許可を取得する必要があります。例: アプリケーションがプロジェクトの課題を作成する場合、アプリケーションには課題の作成権限が必要です。課題の詳細を表示するには、課題を表示する権限が必要です。アプリケーションに必要な権限のセット全体は、権限スコープと呼ばれます。アプリケーションがアクセス許可を要求する方法は、アプリケーション自体の代わりに動作するアプリケーションと、Space ユーザーの代わりに動作するアプ...