Overview
Atlas App Connections は、アプリケーションがユーザー指定のアクセスを通じて Atlas ユーザーの代わりに動作できるようにするMongoDB Atlas OAuth2.1 プラットフォームです。ユーザーがアプリケーションを認証 すると、アプリケーションはAtlas 組織でユーザーが保持する権限と同じ権限で Atlas Administration API を呼び出すために使用できるトークンのセットを受け取ります。プラットフォームの概要と接続されたアプリケーションを組織が管理する方法については、「 Atlas App Connections の概要 」を参照してください。
このガイドでは、完全な統合について説明します。
コード交換のプロトコル キー(PKCE)を使用して OAuth 2.1 認証コード フローを開始
トークンの認可コードの交換とトークンのリフレッシュ
Atlas Administration API を委任されたアクセスで使用する
委任されたアクセスの範囲と制限の理解
ネットワークアクセスの構成とデータベースユーザーの管理
取り消しとエラーの処理
重要な概念
- 委任されたアクセス
- アプリケーションは、自分自身ではなく、Atlas ユーザーの代わりに動作します。ユーザー自身の組織ロールとプロジェクト権限によって、成功する操作が決まります。ユーザーがアクションを実行できない場合、アプリケーションはユーザーに代わってそれを実行できません。
- 組織の削除設定
- 各 Atlas組織が、サードパーティアプリ接続を許可するかどうかを制御します。ユーザーがアプリケーションを認可 している場合でも、特定の組織に対する操作は、その組織でサードパーティのアプリ接続が有効になっている場合にのみ成功します。既存の組織では、削除はデフォルトで無効になっています。ユーザーは複数の組織に属することができるため、各組織の委任設定に応じて、1 つの認可がユーザーの一部の組織では成功し、他の組織では失敗する可能性があります。
- コード交換の証明キー(PKCE)
- OAuth 2.1 認証コード フローへのセキュリティ拡張機能で、認可コードのインターセプト攻撃から保護します。 PKCE では、クライアントがランダムな
code_verifierを生成し、それからcode_challengeを生成し、認可リクエストとともにチャレンジを送信する必要があります。その後、クライアントはトークンの認可コードを交換するときに元のcode_verifierを送信することで、リクエストを発信したことを証明します。
前提条件
始める前に、以下があることを確認してください。
承認された設計提携するステータス。
登録された OAuthアプリケーション。 MongoDBオンボード中に
client_idが提供されます。コンフィギュレーションクライアント(サーバーサイド ウェブ アプリケーション)にもclient_secretが与えられます。公開クライアント(ネイティブおよび単一ページ アプリケーション)はclient_idのみで認証され、シークレットを受信しません。OAuthアプリケーションに登録されたリダイレクト URI 。リダイレクト URI は、ループバック アドレス(
localhost、127.0.0.1、::1)を除き、HTTPS を使用する必要があります。これらのポートではHTTPを使用できます。リダイレクト URI にはフラグメントを含めることはできません(#)。OAuth 2.1 認証コードのフローとコード交換の証明キー(PKCE)に慣れる
ブランド設定のガイドライン
MongoDBロゴなど、統合にMongoDBのブランドアセットが必要な場合は、 MongoDB製品リソース ページを参照してください。
ベース URL
統合を開発し、本番環境に対して開始します。 Atlas では、個別の提携する環境は提供されません。
すべての OAuth とAPIエンドポイントは、次の 2 つの本番環境ベース URL を使用します。
Base | URL |
|---|---|
認可ベース( |
|
クラウドベース( |
|
このガイド全体では、これらの名前が上記の URL の代わりになります。例、トークン エンドポイントは {OAUTH_BASE}/tokens です。
ユーザーがログしてアクセスを許可する認可エンドポイントはクラウドベース({CLOUD_BASE}/oauth/authorize)でホストされ、トークンやその他の OAuth エンドポイントは認可ベース({OAUTH_BASE})でホストされています。この分裂は意図的なものです。 Atlas Administration APIはクラウドベース({CLOUD_BASE}/api/atlas)でホストされています。
Tip
エンドポイントの自動検出
Atlas は OAuth 2.1サーバーのメタデータを {OAUTH_BASE}/.well-known/oauth-authorization-server で公開します。多くの OAuthクライアントライブラリと SDK は、このエンドポイントを読み取って、認可、トークン、および関連するエンドポイントを自動的に検出して構成することができ、エンドポイント URL のハードコーディングを回避できます。
OAuth 2.1 認証コードフロー(PKCE)
Atlas App Connections は、コード交換のプロトコル キー(PKCE)を持つ OAuth 2.1 認証コードのフローを使用します。このフローではユーザーとのやり取りが必要です。ユーザーは Atlas にログインし、アプリケーションがリクエストする権限を承認します。
フローの概要

このフローは、次の 3 つの手順で進みます。
アプリケーションは PKCE コード検証子とチャレンジを生成し、ユーザーを Atlas認可エンドポイントにリダイレクトし、ユーザーは同意画面でアクセスを承認します。
アプリケーションにより、アクセス トークンとリフレッシュ トークンの認可コードが交換されます。
アプリケーションはアクセス トークンを使用して Atlas Administration API を呼び出し、リフレッシュ トークンを使用して有効期限が切れる前に新しいアクセス トークンを取得します。
ステップ 1: 認可リクエスト
次のパラメータを使用して、ユーザーを Atlas認可エンドポイント(https://cloud.mongodb.com/oauth/authorize)に誘導します。アプリケーションがこのエンドポイントを提示する方法を制御します。これは、既存のウィンドウ内の リダイレクト 、 新しい ブラウザウィンドウ、またはポップアップです。
Parameter | 必須 | 説明 |
|---|---|---|
| 必須 |
|
| 必須 | オンボード中にMongoDBによって提供されるアプリケーションのクライアントID 。 |
| 必須 | ユーザーの承認後に Atlas が認可コードを送信する HTTPS URI 。 OAuthアプリケーションに登録された URI と一致する必要があります。 |
| 必須 | PKCE コードのチャレンジは |
| 必須 |
|
| 必須 | アプリケーションが認可リクエストとコールバックの間で状態を維持するために使用する不可視の値。これを使用して、クロスサイトリクエストフォワーダー(CSRF)攻撃から保護し、リダイレクト後にアプリケーションの状態を復元します。 |
前述の表のパラメーターのみを送信します。認可エンドポイントには resource パラメーターが必要ないため、OAuth 2.1 仕様でパラメーターが定義されていても、認可リクエストから省略します。
次の例では、読みやすくするためにURLを複数行分割します。 1 行だけで送信します。
https://cloud.mongodb.com/oauth/authorize ?response_type=code &client_id=<YOUR_CLIENT_ID> &redirect_uri=https://yourapp.example.com/callback &code_challenge=<CODE_CHALLENGE> &code_challenge_method=S256 &state=<RANDOM_STATE_VALUE>
同意画面
ユーザーが Atlas にログインすると、アプリケーションが要求している権限を一覧表示する同意画面が表示されます。
どの Atlas リソースにアクセスできるかを把握する
Atlas 組織でユーザーに代わって実行する
同意画面には、ユーザーに対する次の通知も表示されます。
アプリケーションを認可することで 、
アカウントの権限を使用して、ユーザーがMongoDB Atlasリソースにアクセスしてアクションを実行することを許可します。
アクセス権はいつでも取り消すことができます。
ユーザーが Authorize をクリックした場合、Atlas は、認可code、提供した state 値、および iss パラメータを使用して redirect_uri にリダイレクトします。ユーザーが Decline をクリックした場合、Atlas は error パラメータを使用してリダイレクトします。
コールバックハンドラーは、次の条件を満たす必要があります。
CSR 攻撃を防ぐために、
stateが認可リクエストで送信した値と一致していることを確認します。認可サーバーの混合攻撃を防ぐために、
issが認可ベース(https://authorize.mongodb.com)と一致していることを確認します。codeの使用を試みる前に、errorパラメータを確認し、拒否をグレースフルに処理します。
認証コードは単一使用で、10 分以内に期限切れになります。これらは直ちに交換します。
ステップ 2: トークン交換
Atlas トークン エンドポイントに POSTリクエストを送信して、トークンの認可コードを交換します。
POST https://authorize.mongodb.com/tokens
Body Parameter | 必須 | 説明 |
|---|---|---|
| 必須 |
|
| 必須 | リダイレクトから受信した認可コードです。 |
| 必須 | 認可リクエストで使用される同じリダイレクト URI 。 |
| 必須 | 元の PKCE コード検証文字列。 |
| 必須 | アプリケーションのクライアントID。 |
| 条件付き | アプリケーションのクライアントシークレット。機密クライアント(サーバーサイドのウェブ アプリケーション)にのみ必要です。公開クライアント(ネイティブおよび単一ページ アプリケーション)は、 |
リクエストの例 :
curl --request POST \ --url https://authorize.mongodb.com/tokens \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data 'grant_type=authorization_code' \ --data 'code=<AUTHORIZATION_CODE>' \ --data 'code_verifier=<CODE_VERIFIER>' \ --data 'redirect_uri=https://yourapp.example.com/callback' \ --data 'client_id=<YOUR_CLIENT_ID>' \ --data 'client_secret=<YOUR_CLIENT_SECRET>'
応答には、次のものが含まれます。
フィールド | タイプ | 説明 |
|---|---|---|
| string | Atlas Administration APIリクエストを認証するための Bearer トークン。有効期間は短い。ライフタイムをハードコーディングするのではなく、 |
| string | 現在のアクセス トークンの有効期限が切れたときに新しいアクセス トークンを取得するために使用されるトークン。これを安全に保存します。 |
| string | 常に |
| integer | アクセス トークンの有効期間は秒単位です。現在 |
ステップ 3: アクセス トークンを更新する
アクセス トークンの有効期間は短いです(現在は 10 分)。有効期限が切れた後に Atlas Administration API を呼び出す前に、リフレッシュ トークンを新しいアクセス トークンに交換します。
curl --request POST \ --url https://authorize.mongodb.com/tokens \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data 'grant_type=refresh_token' \ --data 'refresh_token=<YOUR_REFRESH_TOKEN>' \ --data 'client_id=<YOUR_CLIENT_ID>' \ --data 'client_secret=<YOUR_CLIENT_SECRET>'
レスポンスでは常に新しい access_token と新しい refresh_token が返されます。前の更新トークンはすぐに無効化されます。保存されている値の両方を常に置き換えてください。
重要
リフレッシュ トークンは、7 日間非アクティブ(アイドル有効期間)の後に期限切れになります。アクティビティに関係なく、ユーザーは 30 日(最大有効期間)ごとに再認証を行う必要があります。組織の所有者は、より厳しい制限を設定できます。リフレッシュ トークンの有効期限が切れると、ユーザーはアプリケーションを 再認可 する必要があります。ユーザーに再接続を求めることで、これをグレースフルに処理するようにアプリケーションを設計します。
Atlas Admin APIで委任されたアクセス権の使用
アクセス トークンを取得したら、それを使用して Atlas Administration APIリクエストを作成し、Authorization ヘッダーに含めます。
Authorization: Bearer <ACCESS_TOKEN>
リクエストの例 :
curl --request GET \ --url 'https://cloud.mongodb.com/api/atlas/v2/orgs' \ --header 'Authorization: Bearer <ACCESS_TOKEN>' \ --header 'Accept: application/vnd.atlas.2023-01-01+json'
アプリケーションは、 各リクエストの時点で認可ユーザーが保持する同じ権限で動作します。認可後にユーザーのロールが変更された場合、アプリケーションの有効な権限もそれに応じて変更されます。
権限と組織削除設定
特定の Atlas組織に対する操作は、次の両方に当てはまる場合にのみ成功します。
組織ではサードパーティアプリ接続が有効になっています。組織の所有者は、この設定をOrganization Settings >App Connections で構成します。 。これらの設定の詳細については、「 Atlas アプリ接続の概要 」を参照してください。
認可ユーザーには、その組織またはプロジェクト内での操作に必要なロールがあります。
ユーザーがすでにアプリケーションを承認した後に組織の削除が無効になっている場合、その組織を対象とするAPI呼び出しは 403 Forbidden 応答を返します。
認可が完了しても、Atlas Administration API呼び出しの成功は保証されません。 Atlas は組織の削除設定とユーザーのロールを、認可時に 1 回ではなく、すべてのリクエストで評価するため、リクエストは引き続き 403 Forbidden を返しても、OAuth フローと同意画面は正常に完了できます。
組織のアクセスの確認
アプリケーションが操作できる組織を確認するには、認可後に GET /api/atlas/v2/orgs を呼び出します。 Atlas では、サードパーティのアプリ接続を許可している組織のみが返されるため、空のリストでは、ユーザーが属する組織でそれが有効になっていないことを意味します。
空のリストはセットアップ ステップであり、失敗ではありません。組織のアプリ接続を有効にして点。ユーザーの認証情報と同意は有効であるため、空のリストを認可または認証エラーとして表示することは避けてください。
委任されたアクセスには認可ユーザー独自の権限が付与されるため、書込み (write) 操作はそのユーザーのロールによっても異なります。一般的なプロビジョニング操作には次のロールが必要です。
プロジェクトを作成するには、ユーザーに
Organization OwnerまたはOrganization Project Creatorロールが必要です。クラスターを作成するには、ターゲットプロジェクトで
Project OwnerまたはProject Cluster Creatorロールが必要です。
Organization Memberロールのみを持つユーザーはアクセスできるリソースを読み取ることができますが、書込み操作は403 Forbidden を返します。エラー処理で必要なロールに名前を付けて、ユーザーが正しいロールをリクエストできるようにします。利用可能なすべてのロールの詳細については、「 Atlas ユーザーロール 」を参照してください。
アプリケーションがユーザーに代わって組織を作成した場合、新しい組織ではサードパーティのアプリ接続はまだ許可されません。これらを有効にするには手動の手順であり、 MongoDBに連絡して組織を許可リスト作成してください。それまでは、ユーザーがアプリケーションを 承認していても 、アプリケーションは組織で動作できません。
ブロックおよびフィルタリングされたエンドポイント
委任されたアクセスはほとんどの Atlas Administration APIエンドポイントに到達しますが、Atlas は、認可ユーザーの権限に関係なく、一部のエンドポイントの処理は異なります。
ブロックされたエンドポイントは、認可ユーザーが通常操作を許可するロールを持っている場合でも、 403 Forbidden応答を返します。 Atlas は、フェデレーションとシングル サインオン(SSO)構成を読み取りおよび変更するフェデレーション設定エンドポイントをブロックします。 ID プロバイダーの構成はフェデレーション内のすべての組織間で共有されるため、アクセスが委任されると、アプリケーションが認可されていない組織が公開されたり、中断されたりする可能性があります。
フィルタリングされたエンドポイントは 呼び出しを受け入れますが、サードパーティのアプリ接続をオプトインしている組織に基づいて、表示や変更できる内容が制限されます。アプリケーションはそれらの組織のみにアクセスでき、Atlas はオプトインしていない組織のリソースへのアクセスをブロックします。
ユーザーがアクセスできるすべての組織、プロジェクト、または クラスター を一覧表示するエンドポイントは、サードパーティアプリ接続を許可する組織のみを返します。リソースを作成するリクエストの場合、Atlas は対象組織を検証し、その組織がオプトインしていない場合は呼び出しを拒否します。
組織所有者は、Organization Settings >App Connections からオプトインします。 。詳細については、「 権限と組織削除設定 」を参照してください。
Atlas は、時間の経過とともに追加のエンドポイントをブロックまたはフィルタリングして委任されたアクセスのために使用される場合があります。
Control Plane と Data Plane
Atlas Administration API はコントロールプレーンにアクセスします。組織、プロジェクト、クラスター、ユーザーなどの Atlas リソースを作成、構成、および管理できます。データプレーンへの直接アクセス(データベース内のドキュメントの読み取りまたは書込み)は提供されません。
Atlas クラスター内のデータにアクセスするには、 Atlas Administration APIからクラスター接続文字列を取得し、データベースユーザーとMongoDBドライバーまたはシェルを使用して接続します。接続文字列とデータベースの認証情報は、OAuth Bearer トークンとは別です。
取り消しは、コントロールプレーンとデータプレーンのアクセスに異なる影響を与えます。 「 データプレーンの影響 」を参照してください。
サービス アカウントによる継続的なアクセス
委任されたアクセスは、アプリケーションのトークンを認可ユーザーに結合します。ユーザーのロールが変更された場合、そのユーザーはオフボードされるか、ユーザーがリフレッシュ トークンの有効期間内に再認証を行わない場合、統合自体はまだアクティブであっても、アプリケーションは必要な権限を失います。
統合で、認可された特定のユーザーに依存しない継続的な Atlas Administration APIアクセスが必要な場合(継続的なクラスターのサイズ変更や配置リージョンの変更例)は、委任されたアクセス権に依存する代わりに、カスタマーの組織とプロジェクト用にサービス アカウントを作成します。そのワークフローでは、
サービス2.0 アカウントは、認証コード フローではなく、OAuth クライアント認証情報フローを使用して認証されるため、ユーザーの進行中のセッションには依存しません。各サービス アカウントは 1 つの組織に属しており、その組織内の任意の数のプロジェクトへのアクセスを許可できます。 Atlas ロールは、サービス アカウントのアクセス トークンが認証できる操作を制限します。これは、ロールがユーザーを制限するのと同様です。サービス アカウントは Atlas UIにサインインできず、委任アクセスと同様に、データプレーンへのアクセスは提供されません。
顧客の組織のサービス アカウントを作成するには、「 サービス アカウントの概要 」および「 組織のサービス アカウントの作成 」を参照してください。
ユーザーのリソースのプロビジョニング
ほとんどの提携する統合は、認可ユーザーに代わって Atlas リソースをプロビジョニングします。次のシーケンスは、認可された接続から使用可能な接続文字列への共通のパスをカバーします。各リクエストでは、ステップ: トークン交換 のベアラー 2トークンが使用されます。
対象の組織とプロジェクトを特定します。
権限ユーザーがアクセスできる組織を一覧表示するには GET /api/atlas/v2/orgs を呼び出し、次に組織内のプロジェクトを一覧表示するには GET /api/atlas/v2/orgs/{orgId}/groups を呼び出します。
サードパーティアプリ接続を許可している組織のみが使用可能なターゲットとして表示されます。詳細については、「 権限と組織削除設定 」を参照してください。
データベースユーザーを作成します。
POST /api/atlas/v2/groups/{groupId}/databaseUsersアプリケーションがデータプレーン アクセスに使用する ID を作成するには、 を呼び出します。ロールとライフサイクルのガイダンスについては、「 データベースユーザーのライフサイクル 」を参照してください。
ネットワークアクセスを構成します。
アプリケーションのアウトバウンドIPアドレスをプロジェクトのアクセス リストに追加するか、プライベート接続オプションを設定します。詳細については、「 ネットワーク構成とIP許可リスト 」を参照してください。
各エンドポイントの完全なリクエストとレスポンス スキーマについては、 Atlas Administration API の仕様 を参照してください。
ネットワーク構成とIP許可リスト
Atlas Administration API は、パブリック インターネット経由でのみ利用できます。仮想プライベートクラウド(VPC)のピアリングやプライベートエンドポイントでは利用できません。アプリケーションはポート 443 で cloud.mongodb.com にアクセスできる必要があります。
注意
Atlas Administration APIへのアクセスを委任すると、カスタマーが設定したコントロール プレーンのAPIアクセス リスト(APIキーIP許可リスト)の制限はバイパスされます。アクセスは、コントロールプレーンのIP制限ではなく、認可ユーザーの権限と組織の削除設定によって制御されます。詳細については、「 制限 」を参照してください。
データプレーン アクセスの場合、接続先の Atlas クラスターにIP アクセス リストが設定されている場合があります。アプリケーションのアウトバウンドIPアドレスは、 クラスターのIP アクセス リストに追加する必要があります。または、配置に適したネットワーク ピアリングまたはプライベート エンドポイントを構成する必要があります。
初期リリースの接続パターン:
アプリケーションは、データ プレーン アクセスのIP許可リストを構成します。これは、Atlas App Connections プラットフォームによって自動的に処理されません。
アプリケーションが または アクセスをプロビジョニングするクラスターごとに、アウトバウンド IP またはクラスレス ドメイン間ルーティング(CIDR)範囲を、
POST /api/atlas/v2/groups/{groupId}/accessListエンドポイントを使用してクラスターのIP アクセス リストに追加します。データ プレーンをパブリック インターネットに公開しないでください。 IPアクセス リストまたは、ネットワーク ピアリングやプライベート エンドポイントなどのプライベート接続を使用して、データ プレーンのアクセスを常に制限します。
データベースユーザーのライフサイクル
ユーザーに代わって Atlas クラスターをプロビジョニング場合、アプリケーションでデータベースユーザーの作成と管理が必要になる場合があります。初期リリースでは、次のパターンがサポートされています。
データベースユーザーの作成
認可ユーザーのベアラー トークンを使用して、Atlas Administration APIエンドポイント POST /api/atlas/v2/groups/{groupId}/databaseUsers からデータベースユーザーを作成します。ユーザーは、データベースユーザー管理を許可するプロジェクトロール を保持している必要があります。
推奨されるプラクティス
データベースユーザーの制限内にあること。 Atlas100 はプロジェクトごとに データベースユーザーのデフォルト制限を適用します。操作ごとに新しいユーザーを作成する 代わりに、可能な場合は既存のデータベースユーザーを再利用し、 制限に達するのを避ける必要がなくなったユーザーのプロビジョニングを解除します。
スコープ指定されたロール を使用します。
atlasAdminではなく、ユースケースに必要な最小限のデータベースロールを持つデータベースユーザーを作成します。不要になったユーザーのプロビジョニングを解除します。ユーザーがアプリケーションへのアクセスを取り消す と、アプリケーションがユーザーに代わって作成したデータベースユーザーをすべて削除します。 Atlas は、アクセスが取り消されたときにデータベースユーザーを自動的に削除しません。
定義されたスケジュールで認証情報をローテーションします。アプリケーションでデータベースユーザーのパスワードが保存されている場合は、
PATCH /api/atlas/v2/groups/{groupId}/databaseUsers/ {databaseName}/{username}エンドポイントを使用して定期的にローテーションします。
重要
Atlas は、ユーザーがアクセスを取り消すときにアプリケーションが作成したデータベースユーザーやその他のリソースを自動的に削除しません。アプリケーションは、作成したリソースをクリーンアップする必要があります。データベースユーザーのプロビジョニングに失敗した場合、アプリケーションの接続を切断した 後、ユーザーの Atlas アカウントでは認証情報がアクティブのままになります。詳細については、「 制限 」を参照してください。
Atlas が、データベースユーザーのパスワードなど、アプリケーションがプロビジョニングされたリソースの認証情報をローテーションする場合は、認証情報を自分で更新する必要はなく、任意の Webhook を介してアプリケーションに通知できます。これは、OAuth のローテーションとは無関係です。詳しくは、「client_secret トークンとシークレット ストレージ 」を参照してください。 Webhook を実装するには、「 認証情報ローテーション Webhook の実装 」を参照してください。
セキュリティのベストプラクティス
このセクションでは、統合内で認証情報と機密情報を処理するための最小セキュリティ要件について説明します。これらのプラクティスはセキュリティ インシデントのバースト半径を軽減するため、設計パートナーには必須です。
保管時の認証情報の暗号化
アプリケーションは、保管時に暗号化する必要がある機密情報のいくつかのカテゴリを処理します。
接続文字列。 Atlas 接続文字列には埋め込み認証情報または参照データベースユーザーが含まれます。高度な暗号化標準(AES)-256 または 同等の暗号化を使用して、保存されている接続文字列を暗号化します。構成ファイル、環境変数ストア、またはデータベースに接続文字列をプレーンテキストで保存しないでください。
OAuth トークン。リフレッシュ トークンは有効期間が長い認証情報です。これらは暗号化されたシークレット マネージャー(例、 、HashiCorp Vault、 Amazon Web Services (AWS)Secrets Manager、 Azure Key Vault)に保存します。暗号化れていない状態のアプリケーションデータベースにリフレッシュ トークンを保存しないでください。
クライアントシークレット。あなたの
client_secretはパスワードと同じです。このファイルを シークレット マネージャーに保存し、公開されたと思われる場合はローテーションします。
Tip
シークレットレス認証を優先
Atlas は PKCE を使用するシークレットレス認証をサポートしているため、client_secret を管理する必要が完全に不要になります。クライアントの種類で許可されている場合は、クライアントシークレットをプロビジョニング保存するのではなく、シークレットレス認証を最も安全なオプションとして使用します。
接続文字列の処理
アプリケーションがユーザーに代わって Atlas Administration APIから接続文字列を取得する場合:
接続文字列は、可能な場合は長期的に保存するのではなく、必要なときに取得します。
アプリケーションで接続文字列を保持する必要がある場合は、必要なもの(例、ホスト名とポート)のみを認証情報とは別に保存します。
接続文字列をログたり、エラーメッセージやスタックトレースに含めたりしないでください。
トークンとシークレット ストレージ
ソース管理にトークンまたはシークレットをコミットしないでください。
アクセス トークン、リフレッシュ トークン、またはクライアントシークレットをログしないでください。アプリケーションがデバッグ用に Atlas Administration APIリクエストを記録する場合は、
Authorizationヘッダーを編集します。シークレット マネージャー内のシークレットへのアクセスを、必要なサービスのみにスコープ設定します。
client_secretを定期的に、かつ侵害が発生したと思われる場合はすぐにローテーションします。 OAuthアプリケーションに関連付けられたシークレットをローテーションするには、 MongoDBに問い合わせてください。
取り消しとエラー処理
取り消しの動作を理解することは、回復力のある統合を設計するために重要です。失効はいくつかの方法でトリガーされ、コントロールプレーンとデータプレーンのアクセスに異なる方法で影響します。
失効トリガー
次のいずれかのアクションのいずれかによって取り消しを行うことができます。
ユーザーが Atlas UIからのアクセスを取り消します(User Settings Connected Apps)。
組織所有者は、Organization Settings から組織全体のサードパーティアプリ接続を制限します。
組織の最大更新トークン有効期間に達したか、トークンがアイドル有効期間の制限を超えてアイドル状態になっていたため、更新トークンは期限切れになります。
アプリケーションは、アクセスが不要になると、独自のトークンを取り消します。
重要
上記の trigger は、OAuth フローを通じて発行されたトークンを取り消します。サービス アカウントは個々のユーザーの認可に関連付けられていないため、これらは継続的なアクセス用に作成したサービス アカウントには影響しません(「 サービス アカウントによる継続的なアクセス 」を参照してください)。
組織のサービス アカウントの認証情報を取り消しまたは削除しないでください。サービス アカウントは、そのユーザーの個々のアクセスではなく、 統合の進行中の認可を表します。
カスタマーがアカウントから統合を削除または切断したときに、製品でどのようなアクションが意味するかに応じて、サービス アカウントの認証情報を取り消します。
アプリケーションからのトークンの取り消し
ユーザーがアプリケーションを自分のインターフェースから切断するか、統合にアクセスが不要になった場合は、トークンを期限切れにするのではなく、トークンを取り消します。失効エンドポイントに POSTリクエストを送信します。
curl --request POST \ --url https://authorize.mongodb.com/tokens/revoke \ --header 'Content-Type: application/x-www-form-urlencoded' \ --user '<YOUR_CLIENT_ID>:<YOUR_CLIENT_SECRET>' \ --data 'token=<REFRESH_OR_ACCESS_TOKEN>' \ --data 'token_type_hint=refresh_token'
Parameter | 必須 | 説明 |
|---|---|---|
| 必須 | 取り消すアクセス トークンまたはリフレッシュ トークン。 |
| 任意 |
|
リフレッシュ トークンを取り消すと、そのトークンから発行されたすべてのアクセス トークンも無効になります。エンドポイントはトークンが有効かどうかを確認するために 200 OK を返すため、成功応答はトークンが存在したことを証明するものではなく、トークンが使用できなくなったことを確認するものとして扱います。
コントロールプレーンの影響
取り消しがどの程度有効になるかは、アクセスを取り消すユーザーによって異なります。
組織の所有者はサードパーティのアプリ接続を制限します。Atlas Administration API は呼び出しごとに組織の削除設定をチェックするため、その組織に対して
403 Forbiddenの返却をすぐに開始するようにリクエストします。ユーザーがアプリケーションのアクセスを取り消します。リフレッシュ トークンはすぐに無効化されますが、すでに発行されたアクセス トークンは、有効期限が切れるまで有効のままになります。アクセス トークンの有効期間が短いため、アプリケーションは最大10 分間呼び出しに成功し続ける可能性があります。その後、 は
401 Unauthorizedを返します。MongoDB はOAuthクライアントを削除します 15。アプリケーションが接続されているすべての組織にわたって失効のカスケードがあり、完了までに最大 分かかります。
即座の伝達に依存するのではなく、401 と 403 応答を積極的に処理するようにアプリケーションを設計します。
データプレーンの影響
Atlas Administration APIアクセスを取り消しても、既存のデータ プレーン接続はすぐに終了しません。アプリケーションは、OAuth トークンとは独立した認証情報で認証する、作成されたデータベースユーザーを通じてデータプレーンにアクセスします。トークンを取り消しても、これらの認証情報は無効になりません。開いているMongoDBドライバー セッションと接続プール接続は、タイムアウトやアイドルの閉じ、アプリケーションによる明示的な閉じなど、通常の接続ライフサイクル イベントによって閉じられるまでアクティブのままになります。
取り消しでは、アプリケーションで作成されたデータベースユーザーは削除されないため、切断フローの一部としてクリーンアップします。詳細については、「 データベースユーザーのライフサイクル 」を参照してください。
Error Scenarios
Scenario | ステータス | 推奨アクション |
|---|---|---|
アクセス トークンの有効期限 |
| リフレッシュ トークンを使用して新しいアクセス トークンを取得します。 |
アクセス トークンが失効しました |
| ユーザーに再認可を求める。リフレッシュ トークンも無効化されます。 |
リフレッシュ トークンの有効期限が切れまたは取り消された |
| ユーザーに再認可を求める。認証コードのフローを再起動します。 |
クライアント認証情報が無効です |
|
|
組織の削除が無効になりました |
| Atlas組織でサードパーティのアプリ接続が許可されていないことをユーザーに通知します。組織の所有者に指示します。 |
ブロックされたエンドポイント |
| 要求されたエンドポイントは、委任されたアクセスでは使用できません。統合から呼び出しを削除します。 |
ユーザーに必要なロールがない |
| 認可ユーザーには、この操作に必要なロールがありません。ユーザーに通知し、組織の所有者に必要なロールをリクエストを提案します。 |
OAuth エラー応答
認可およびトークン エンドポイントからのエラーは、標準の OAuth 構造に従います。
{ "error": "error_code", "error_description": "Human-readable explanation" }
次の表に一般的な error 値を示します。
エラー コード | When | 推奨アクション |
|---|---|---|
| 必須 パラメーターが欠落しているか、不正である。 | 必要なパラメータと形式を確認します。 |
| クライアント認証に失敗しました。 |
|
| 認可コードの有効期限が切れているか、すでに使用されているか、リフレッシュ トークンが無効です。 | 認証コードのフローを再起動します。 |
| この付与タイプでは、クライアントは認可されていません。 | クライアント登録に |
| ユーザーが同意を拒否しました。 | ユーザーに通知します。自動的に再試行しないでください。 |
|
| リソースがクライアントに登録されていることを確認します。 |
|
|
|
同じ認可コードが複数回表示される場合、サーバーはコードの中断に対するセキュリティ対策として、その付与に関連付けられているすべてのトークンを無効にします。この問題が発生した場合、ユーザーは最初から再認可する必要があります。
無効化されたクライアント
MongoDB は、インシデント応答や提携するのオフボード例、 登録されたクライアントを無効にすることができます。クライアントが無効になっている間、サーバーは新しい認可フローの開始や新しいトークンの発行を拒否します。
認可エンドポイントは、
error=access_deniedとclient is disabledのerror_descriptionを持つredirect_uriにユーザーをリダイレクトします。トークン エンドポイントは、
invalid_clientと同じ説明を持つ401を返します。これは、refresh_tokenを含むすべての付与タイプに適用されるため、アプリケーションは無効になっている間は既存の更新トークンを交換できません。
クライアントが無効化される前に発行されたアクセス トークンは、有効期限が切れるまで有効のままです。クライアントを無効にすると、既存のトークンが無効になるのではなく、新しいトークンがブロックされます。
無効にされたクライアントは、単独では回復できません。 client is disabled をターミナル条件として扱い、再試行を停止し、障害を表示し、 MongoDB提携するチームにクライアントを再度有効にするよう連絡します。