对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

将您的应用与Atlas App Connections 集成

Atlas App Connections 是MongoDB Atlas OAuth 2.1 平台,使您的应用程序能够通过用户委托的访问权限代表Atlas用户进行操作。当用户授权您的应用程序时,您的应用程序会收到一设立令牌,它可以用来调用Atlas Administration API,其权限与用户在其Atlas组织中拥有的权限相同。有关该平台的概述以及组织如何管理连接的应用程序,请参阅Atlas App Connections 概述。

本指南介绍了完整的集成:

  • 使用代码交换证明密钥 (PKCE) 启动 OAuth 2.1 授权代码流程

  • 将授权代码交换为令牌并刷新令牌

  • 使用具有委派访问权限的Atlas Administration API

  • 了解委派访问权限的范围和限制

  • 配置网络访问权限和管理数据库用户

  • 处理撤销和错误

委托访问权限
您的应用程序代表Atlas 用户而不是自身运行。用户自己的组织角色和项目权限决定了哪些操作会成功。如果用户无法执行某项动作,则您的应用程序也无法代表他们执行该操作。
组织委托设置
每个Atlas组织可以控制是否允许第三方应用连接。即使用户授权您的应用程序,仅当特定组织启用了第三方应用连接时,针对该组织的操作才会成功。默认下,现有组织禁用委派。由于一个用户可能属于多个组织,因此一次授权可能会对用户的某些组织成功,而对其他组织失败,具体取决于每个组织的委派设置。
代码交换证明密钥 (PKCE)
OAuth 2.1 授权代码流的安全扩展,可防止授权代码拦截攻击。 PKCE 要求客户端生成随机 code_verifier,从中派生出 code_challenge,然后将挑战与授权请求一起发送。然后,客户端在将授权代码交换为令牌时,通过发送原始 code_verifier 来证明它发起了请求。

开始之前,请确认您已:

  • 已批准设计合作身份。

  • 已注册的 OAuth应用程序。 MongoDB在载入过程中为您提供一个 client_id。机密客户端(服务器端 Web 应用程序)也会收到 client_secret。公共客户端(原生和单页面应用程序)仅使用 client_id 进行身份验证,并且不会接收密钥。

  • 在 OAuth应用程序中注册的重定向 URI。重定向 URI 必须使用 HTTPS,但环回地址(localhost、127.0.0.1、::1)除外,因为环回地址可能在任何端口上使用HTTP 。重定向 URI 不得包含片段 (#)。

  • 熟悉 OAuth 2.1 授权代码流程和代码交换证明密钥 (PKCE)。

如果您需要MongoDB品牌资产进行集成,例如MongoDB徽标,请参阅MongoDB品牌资源页面。

开发并启动针对生产的集成。 Atlas不提供单独的合作环境。

所有 OAuth 和API端点都使用两个生产基础 URL:

Base
URL

授权库 ({OAUTH_BASE})

https://authorize.mongodb.com

云基础 ({CLOUD_BASE})

https://cloud.mongodb.com

在本指南中,这些名称代表上述 URL。示例,令牌端点为 {OAUTH_BASE}/tokens。

用户登录并授予访问权限的授权端点托管在云基础 ({CLOUD_BASE}/oauth/authorize) 上,而令牌和其他 OAuth 端点托管在授权基础 ({OAUTH_BASE}) 上。这种分割是故意的。 Atlas Administration API托管在云基础 ({CLOUD_BASE}/api/atlas) 上。

提示

自动发现端点

Atlas在 {OAUTH_BASE}/.well-known/oauth-authorization-server 上发布 OAuth 2.1服务器元数据。许多 OAuth客户端端库和 SDK 都可以读取此端点,以自动发现和配置授权、令牌和相关端点,从而避免对端点 URL 进行硬编码。

Atlas App Connections 将 OAuth 2.1 授权代码流程与代码交换证明密钥 (PKCE) 结合使用。此流程需要用户交互:用户登录Atlas并批准应用程序请求的权限。

显示应用程序、用户浏览器、 MongoDB授权端点、 MongoDB令牌端点和Atlas Admin API之间使用 PKCE 的 OAuth 2.1 授权代码流的序列图。
点击放大

该流程分三个步骤进行:

  1. 您的应用程序会生成 PKCE 代码验证程序和挑战,将用户重定向到Atlas授权端点,然后用户在同意屏幕上批准访问权限。

  2. 您的应用程序将授权代码交换为访问权限令牌和刷新令牌。

  3. 您的应用程序使用访问权限令牌调用Atlas Administration API ,并使用刷新令牌在新的访问权限令牌过期之前获取它们。

使用以下参数将用户定向到Atlas授权端点 (https://cloud.mongodb.com/oauth/authorize)。您可以控制应用程序显示此端点的方式:现有窗口内的重定向、新的浏览器窗口或弹出窗口。

Parameter
必需
说明

response_type

必需

必须是 code。

client_id

必需

应用程序的客户端ID,由MongoDB在载入期间提供。

redirect_uri

必需

Atlas在用户批准后发送授权代码的 HTTPS URI。必须与在 OAuth应用程序中注册的 URI 匹配。

code_challenge

必需

派生自您的 code_verifier 的 PKCE 代码挑战。生成一个随机的 43 到 128 字符串作为 code_verifier,然后计算 BASE64URL(SHA256(code_verifier))。

code_challenge_method

必需

必须是 S256。 plain 方法不受支持,因此被拒绝。

state

必需

一个不透明的值,应用程序使用它来维护授权请求和回调之间的状态。使用它可以防止跨站点请求伪造 (CSRF) 攻击,并在重定向后恢复应用程序状态。

仅发送上表中的参数。授权端点不需要 resource 参数,因此即使 OAuth 2.1 规范定义了参数,也请从授权请求中省略该参数。

为了便于阅读,以下示例将URL换行。以单行形式发送:

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会重定向到 redirect_uri,其中包含授权code、您提供的 state 值和 iss 参数。如果用户单击 Decline, Atlas会使用 error 参数进行重定向。

您的回调处理程序必须:

  1. 验证 state 是否与您在授权请求中发送的值匹配,以防止 CSRF 攻击。

  2. 验证 iss 与授权库 (https://authorize.mongodb.com) 匹配,防止授权服务器混淆攻击。

  3. 在尝试使用 code 之前,检查是否有 error 参数并妥善处理拒绝。

授权代码为一次性使用,且会在 10 分钟内过期。及时更换。

通过向Atlas令牌端点发出 POST请求,将授权代码交换为令牌:

POST https://authorize.mongodb.com/tokens
正文参数
必需
说明

grant_type

必需

必须是 authorization_code。

code

必需

从重定向中收到的授权代码。

redirect_uri

必需

授权请求中使用的同一重定向 URI。

code_verifier

必需

原始 PKCE 代码验证程序字符串。

client_id

必需

您的应用程序的客户端 ID。

client_secret

可选的

应用程序的客户端密钥。仅机密客户端(服务器端 Web 应用程序)需要。公共客户端(原生和单页面应用程序)仅使用 client_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>'

响应包括:

字段
类型
说明

access_token

字符串

用于验证Atlas Administration API请求的持有者令牌。短暂的。依靠 expires_in 值来确定何时刷新,而不是对生命周期进行硬编码。

refresh_token

字符串

用于在当前访问令牌过期时获取新访问权限令牌的令牌。请妥善保管。

token_type

字符串

始终为 Bearer。

expires_in

整型

访问令牌的有效期(以秒为单位)。目前为 600(10 分钟)。依靠此值来确定何时刷新,而不是对生命周期进行硬编码,因为默认可能会更改。

访问令牌的有效期很短(目前为 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 天(最长生命周期)重新进行身份验证。组织所有者可以配置更严格的限制。当刷新令牌过期时,用户必须重新授权您的应用程序。将您的应用程序设计为通过提示用户重新连接来妥善处理此问题。

获取访问权限令牌后,将其包含在 Authorization 标头中,以使用它来发出Atlas Administration API请求:

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'

您的应用程序的操作权限与授权用户在每次请求时所拥有的权限相同。如果用户的角色在授权后发生变化,应用程序的有效权限也会相应更改。

仅当以下两个条件为 true 时,针对特定Atlas组织的操作才会成功:

如果在用户授权您的应用程序后为组织禁用委派,则针对该组织的API调用将返回 403 Forbidden 响应。

已完成的授权并不能保证Atlas Administration API调用成功。 Atlas在每次请求(而不是在授权时)评估组织的委托设置和用户角色,因此 OAuth 流程和同意屏幕可以干净利落地完成,同时请求仍返回 403 Forbidden。

授权后调用 GET /api/atlas/v2/orgs 以确定应用程序可以操作的组织。 Atlas仅返回允许第三方应用连接的组织,因此空列表意味着用户所属的组织均未启用第三方应用程序连接。

空列表是设置步骤,而不是失败。提示用户要求组织所有者为组织启用应用连接,并点他们查看Atlas App Connections Overview(Atlas 应用程序连接概述)。避免将空列表显示为授权或身份验证错误,因为用户的凭证和同意是有效的。

由于委派访问权限包含授权用户自己的权限,因此写入操作也取决于该用户的角色。常见的预配操作需要以下角色:

仅持有 Organization Member角色的用户可以读取他们有权访问权限的资源,但写入操作会返回 403 Forbidden。命名错误处理中所需的角色,以便用户可以请求正确的角色。要学习;了解所有可用角色,请参阅Atlas用户角色。

当应用程序代表用户创建组织时,新组织尚不允许第三方应用连接。启用它们是一个手动步骤:联系MongoDB以将组织列入允许名单。在此之前,即使用户授权了您的应用程序应用程序,您的应用程序也无法对组织执行操作。

委托访问权限可到达大多数Atlas Administration API端点,但无论授权用户的权限如何, Atlas都会以不同方式对待某些端点。

即使授权用户拥有通常允许该操作的角色,被阻止的端点也会返回 403 Forbidden 响应。 Atlas会阻止联合设置端点,这些端点读取和修改联合和单点登录 (SSO) 配置。身份提供商配置在联合中的每个组织之间共享,因此对其的委托访问权限可能会暴露或扰乱从未授权过您的应用程序的组织。

筛选的端点接受调用,但根据选择加入第三方应用连接的组织,限制其可以看到或更改的内容。您的应用程序只能访问这些组织, Atlas会阻止访问权限未选择加入的组织的资源。

跨组织的端点(例如列出用户可以访问权限的每个组织、项目或集群的端点)仅返回允许第三方应用连接的组织。对于创建资源的请求, Atlas会验证目标组织,并在该组织未选择加入时拒绝调用。

组织所有者选择加入 Organization Settings > App Connections。要学习;了解更多信息,请参阅权限和组织委派设置。

随着时间的推移, Atlas可能会区块或过滤其他端点以进行委托访问权限。

Atlas Administration API提供控制平面访问权限:您可以创建、配置和管理Atlas资源,例如组织、项目、集群和用户。它不提供直接的数据平面访问权限(在数据库中读取或写入文档)。

要访问权限Atlas集群中的数据,请通过Atlas Administration API检索集群连接字符串,并使用数据库用户和MongoDB驾驶员或Shell进行连接。连接字符串和数据库凭证与 OAuth 不记名令牌是分开的。

撤销对控制平面和数据平面访问权限的影响不同。请参阅数据平面影响。

委派访问权限将应用程序的令牌与授权用户绑定。如果该用户的角色发生变化、用户已下线或用户未在刷新令牌生命周期内重新进行身份验证,则即使集成本身仍处于活动状态,您的应用程序也会失去其所需的权限。

如果您的集成需要持续的Atlas Administration API访问权限,且不依赖于特定用户是否保持授权,示例调整集群大小或持续更改部署区域,请为客户的组织和项目创建服务帐号,而不是依赖委派访问权限该工作流程。

服务帐户使用 OAuth 2.0 客户端凭证流程而不是授权代码流程进行身份验证,因此它不依赖于用户正在进行的会话。每个服务帐户都属于一个组织,您可以授予该帐户访问权限该组织内任意数量项目的权限。 Atlas角色限制服务帐户的访问权限令牌可以进行身份验证的操作,就像角色限制用户一样。服务帐户无法登录Atlas用户界面,并且与委托访问权限一样,不提供数据平面访问权限。

要为客户的组织创建服务帐户,请参阅服务帐户概述和为组织创建服务帐户。

大多数合作集成都会代表授权用户预配Atlas资源。以下序列涵盖了从授权连接到可用连接字符串的常见路径。每个请求都使用步骤 2:令牌交换中的持有者令牌。

1

调用 GET /api/atlas/v2/orgs 以列出授权用户可以访问权限的组织,然后调用 GET /api/atlas/v2/orgs/{orgId}/groups 以列出组织内的项目。

只有允许第三方应用连接的组织才会显示为可用目标。要学习;了解更多信息,请参阅权限和组织委派设置。

2

使用项目名称和目标组织的 orgId 调用 POST /api/atlas/v2/groups。 Atlas会验证请求正文中的 orgId,并在该组织不允许第三方应用连接时返回 403 Forbidden。

3

使用集群名称、集群类型和复制规范调用 POST /api/atlas/v2/groups/{groupId}/clusters。集群创建是异步的。轮询 GET /api/atlas/v2/groups/{groupId}/clusters/{clusterName},直到集群的 stateName 为 IDLE。

5

将应用程序的出站IP地址添加到项目访问权限列表,或配置专用连接选项。要学习;了解详情,请参阅网络配置和IP白名单。

6

从集群资源中读取 connectionStrings字段,然后使用您创建的数据库用户连接MongoDB驾驶员。连接字符串和数据库凭证与 OAuth 不记名令牌是分开的。

有关每个端点的完整请求和响应模式,请参阅Atlas Administration API规范。

Atlas Administration API只能通过公共互联网访问。它无法通过 Virtual Private 云 (VPC) 对等互连或私有端点使用。您的应用程序必须能够通过端口 443 访问 cloud.mongodb.com。

注意

对Atlas Administration API 的委派访问权限可绕过客户配置的任何控制平面API访问权限列表(API密钥IP允许列表)限制。访问受授权用户的权限和组织的委派设置控制,而不是控制平面IP限制。要学习;了解更多信息,请参阅限制。

对于数据平面访问权限,您要连接的Atlas 集群可能配置了IP访问列表。应用程序的出站IP地址必须添加到集群的IP访问列表中,或者必须配置适合您部署的网络对等互连或私有端点。

初始发布中的连接模式:

  • 您的应用程序负责为数据平面访问权限配置IP白名单。 Atlas App Connections 平台不会自动处理此问题。

  • 对于应用程序预配或访问的每个集群,使用 POST /api/atlas/v2/groups/{groupId}/accessList 端点将出站 IP 或无类别域间路由 (CIDR) 范围添加到集群的IP访问列表。

  • 切勿将数据平面暴露在公共互联网上。始终使用IP访问权限列表或专用连接(例如网络对等互连或私有端点)限制数据平面访问权限。

在代表用户预配Atlas集群时,您的应用程序可能需要创建和管理数据库用户。初始发布支持以下模式。

使用授权用户的不记名令牌,通过Atlas Administration API端点 POST /api/atlas/v2/groups/{groupId}/databaseUsers 创建数据库用户。用户必须拥有允许数据库用户管理的项目角色。

  • 保持在数据库用户限制之内。 Atlas对每个项目强制执行 100数据库用户的默认限制。尽可能重复使用现有数据库用户,而不是为每个操作创建新用户,并取消预配不再需要的用户以避免达到限制。

  • 使用有作用域的角色。创建具有使用案例所需的最低数据库角色的数据库用户,而不是 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 经理或Azure Key Vault )。不要在未加密的情况下将刷新令牌存储在应用程序数据库中。

  • 客户端密钥。您的 client_secret 相当于密码。将其存储在密钥管理器中,如果怀疑其已被暴露,则进行轮换。

提示

首选无密钥身份验证

Atlas支持使用 PKCE 的无密钥身份验证,从而完全无需管理client_secret。在客户端类型允许的情况下,使用无密钥身份验证作为最安全的选项,而不是预配和存储客户端密钥。

当您的应用程序代表用户从Atlas Administration API检索连接字符串时:

  • 在需要时检索连接字符串,而不是尽可能长期存储它们。

  • 如果您的应用程序必须保留连接字符串,请仅将所需的内容(示例主机名和端口)与凭证分开存储。

  • 不要日志连接字符串,也不要将其包含在错误消息或堆栈跟踪中。

  • 请勿将令牌或密钥提交给源代码管理。

  • 不日志访问权限令牌、刷新令牌或客户端密钥。如果您的应用程序记录了用于调试的Atlas Administration API请求,请编辑 Authorization 标头。

  • 将对密钥管理器中密钥的访问权限限定为仅需要这些密钥的服务。

  • 定期轮换您的 client_secret,如果出现疑似遭到泄露的情况,请立即立即轮换。请联系MongoDB以轮换与您的 OAuth应用程序关联的密钥。

了解撤销行为对于设计弹性集成非常重要。撤销可以通过多种方式触发,并对控制平面和数据平面访问权限产生不同的影响。

可以通过以下任一操作进行撤销:

  • 用户从Atlas用户界面撤销访问权限(User Settings > Connected Apps)。

  • 组织所有者限制整个组织与 Organization Settings 的第三方应用连接。

  • 刷新令牌过期的原因是已达到组织的最大刷新令牌生命周期或令牌的空闲时间超过空闲生命周期限制。

  • 当您的应用程序不再需要访问权限时,它会撤销自己的令牌。

重要

上述触发器撤销通过 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
必需
说明

token

必需

要撤销的访问权限令牌或刷新令牌。

token_type_hint

Optional

access_token 或 refresh_token。帮助服务器优化令牌查找。

撤销刷新令牌还会使其颁发的每个访问权限令牌失效。无论令牌是否有效,端点都会返回 200 OK,因此将成功响应视为令牌不再可用的确认,而不是令牌存在的证明。

撤销生效的速度取决于撤销访问权限的人:

  • 组织所有者限制第三方应用连接: Atlas Administration API会在每次调用时检查组织的委托设置,因此针对该组织的请求会立即开始返回 403 Forbidden。

  • 用户撤销应用程序的访问权限:刷新令牌立即失效,但已颁发的任何访问权限令牌在过期之前仍然有效。由于访问权限令牌的有效期很短,因此您的应用程序可能会在最多 10 分钟内继续进行成功的调用。之后,调用将返回 401 Unauthorized。

  • MongoDB删除您的 OAuth客户端:在您的应用程序连接到的每个组织中级联撤销,这最多需要 15 分钟才能完成。

将应用程序设计为主动处理401 和 403 响应,而不是依赖立即传播。

撤销Atlas Administration API访问权限不会立即终止现有数据平面连接。您的应用程序通过其创建的数据库用户到达数据平面,使用独立于 OAuth 令牌的凭证进行身份验证。撤销令牌并不会使这些凭证失效。打开MongoDB驾驶员会话和连接池连接将保持活动状态,直到被正常的连接生命周期事件关闭,例如超时、空闲关闭或应用程序显式关闭。

由于撤销不会删除应用程序创建的数据库用户,因此应在断开连接流程中将其清理。要学习;了解更多信息,请参阅数据库用户生命周期。

Scenario
状态
建议的操作

访问令牌已过期

401

使用刷新令牌获取新的访问权限令牌。

访问令牌已撤销

401

提示用户重新授权。刷新令牌也会失效。

刷新令牌已过期或已撤销

400

提示用户重新授权。重新启动授权代码流程。

客户端凭证无效

401

验证您的 client_id 和 client_secret。

已为组织禁用委派

403

通知用户,其Atlas组织不允许第三方应用连接。将他们定向到其组织所有者。

已阻止的端点

403

无法通过委派访问权限所请求的端点。从集成中删除该调用。

用户缺少所需角色

403

授权用户没有此操作所需的角色。通知用户并建议他们向组织所有者请求必要的角色。

来自授权和令牌端点的错误遵循标准 OAuth 结构:

{
"error": "error_code",
"error_description": "Human-readable explanation"
}

下表列出了常见的 error 值:

错误代码
何时
建议的操作

invalid_request

必需参数缺失或格式不正确。

检查所需参数和格式。

invalid_client

客户端身份验证失败。

验证您的 client_id 和 client_secret。

invalid_grant

授权代码已过期或已被使用,或者刷新令牌无效。

重新启动授权代码流程。

unauthorized_client

客户端无权使用此授权类型。

验证您的客户端注册是否包含 authorization_code。

access_denied

用户拒绝同意。

通知用户。不要自动重试。

invalid_target

resource 参数无效或缺失。

验证资源是否已为您的客户端注册。

unsupported_token_type

token_type_hint 值无效。

使用 access_token 或 refresh_token。

如果多次提供相同的授权代码,服务器将使与该授权关联的所有令牌失效,作为防止代码拦截的安全措施。发生这种情况时,用户必须从头开始重新授权。

MongoDB可以禁用已注册的客户端,示例在事件响应或合作退出期间。当客户端被禁用时,服务器拒绝启动新的授权流程或颁发新令牌:

  • 授权端点将用户重定向到 error=access_denied 的 redirect_uri,error_description 为 client is disabled。

  • 令牌端点返回带有 invalid_client 和相同描述的 401。这适用于每种授权类型,包括 refresh_token,因此应用程序在禁用时无法交换现有的刷新令牌。

在禁用客户端之前颁发的访问令牌在过期之前仍然有效。禁用客户端会阻止新令牌,而不是使现有令牌失效。

禁用的客户端无法自行恢复。将 client is disabled 视为终止条件:停止重试,显示故障,并联系MongoDB合作团队以重新启用客户端。

给本页内容打分