本指南概述了如何安全地授权关联的应用平台访问您的服务。对于关联的应用 MCP 集成,我们强烈建议使用 OAuth 2.1(委托授权的业界标准)和用于代码交换的证明密钥 (PKCE),以确保用户数据的最高安全性以及“智能体”流程的可靠性。关联的应用平台支持授权代码授权类型,并使用用于代码交换的证明密钥 (PKCE) 参数。
PKCE 对于所有 OAuth 2.1 都是强制性的,对于 OAuth 2.0 是可选的。
为了实现自动发现并简化初始配置流程,您的授权服务器必须支持授权服务器元数据扩展(也称为 OAuth 发现)。
Gemini MCP 如何提取配置 JSON
Gemini MCP 控制台会尝试从以下网址获取配置 JSON,顺序如下。
如果您的授权服务器网址位于网域的顶层(例如 https://auth.example.com),Gemini 会将标准的“well-known”目录附加到您的网域,并按以下顺序查找服务器:
https://auth.example.com/.well-known/oauth-authorization-serverhttps://auth.example.com/.well-known/openid-configuration
如果您的授权服务器网址位于网域中的特定子目录或路径(例如 https://auth.example.com/realms/master),Gemini 会直接将相同的“well-known”路径附加到该子目录,顺序如下。
.../realms/master/.well-known/oauth-authorization-server.../realms/master/.well-known/openid-configuration.../realms/master/.well-known/openid-configuration(嵌套路径支持)
必需的 JSON 功能
您的元数据响应必须包含以下字段。如果缺少必填字段或找不到有效类型,则集成会失败。
authorization_endpoint- 必须是有效的字符串网址。
token_endpoint- 必须是有效的字符串网址。
response_types_supported- 必须包含字符串
code。 registration_endpoint目前,Play 管理中心依赖于 Dynamic Client。
注册 (RFC 7591)。您必须在元数据中提供注册端点,或直接在 Play 管理中心界面中输入客户端 ID/密钥。
如果您的授权服务器不支持动态客户端注册 (DCR),您必须在 Play 管理中心界面中手动实现并填充客户端 ID 和客户端密钥字段,才能完成集成。
如果您的实现支持用于代码交换的证明密钥 (PKCE) 或永久性会话,则必须在发现 JSON 中包含相关功能字段(例如质询方法和授权类型)。这有助于确保与 Gemini 的安全和连接标准兼容。如果您支持范围,则必须包含 scopes_supported 字段。
配置示例
以下是满足客户要求的有效 JSON 响应。
{
"issuer": "https://auth.example.com",
"authorization_endpoint": "https://auth.example.com/oauth/authorize",
"token_endpoint": "https://auth.example.com/oauth/token",
"registration_endpoint": "https://auth.example.com/oauth/register",
"response_types_supported": [
"code",
"token",
"id_token"
],
"grant_types_supported": [
"authorization_code",
"refresh_token"
]
}
对于包含 PKCE 的情况,以下代码段展示了 JSON 块中可能包含的内容示例。
"grant_types_supported": ["authorization_code", "refresh_token"],
"code_challenge_methods_supported": ["S256"]
对于包含 scopes_supported 字段的情况,以下代码段展示了 JSON 块中可能包含的内容示例。
"scopes_supported": ["mcp", "cart.order"],
授权代码流程(简化版)
以下步骤概述了标准授权代码流程。此序列图展示了 Connected Apps Platform 如何安全地从您的服务器获取必要的访问令牌,以便代表用户执行操作。
授权请求:Google 平台确定需要调用您的函数,但用户尚未获得授权。聊天机器人通过将用户的浏览器重定向(或显示链接)到您的授权端点来启动流程。
此请求包含您的客户端 ID(或通过 DCR 自动生成)、Gemini 重定向 URI 以及关键 PKCE 参数(
code_challenge和code_challenge_method)。将以下网址列入许可清单,以便进行 OAuth 设置:
https://oauth-redirect.googleusercontent.com/r/*https://oauth-redirect-sandbox.googleusercontent.com/r/*https://oauth-redirect-test.googleusercontent.com/r/*https://oauth-redirect.googleusercontent.com/a/*https://oauth-redirect-sandbox.googleusercontent.com/a/*https://oauth-redirect-test.googleusercontent.com/a/*
用户同意:您的授权服务器会验证请求、对用户进行身份验证(登录),并要求用户授予 Google 平台访问其数据或服务的权限。
代码授权:用户同意后,您的服务器会将用户的浏览器重定向回 Gemini RedirectURI,并在网址中附加一个临时授权代码。
令牌交换:Gemini 背后的后端会向您的令牌端点发送
POST请求,将授权代码交换为访问令牌。授予访问权限:您的令牌端点会验证代码和 PKCE 参数,签发访问令牌和(可选)刷新令牌,并将其返回给 Gemini。
PKCE 的主要要求
PKCE 增加了一层安全保护,可防止未经授权拦截授权代码。
code_verifier:Gemini 在流程开始时生成的加密随机字符串。此信息不会公开。code_challenge:code_verifier的转换,通常是 SHA256 哈希。此代码会公开发送,如授权代码流程的第 1 步中所述。- 验证:您的令牌端点(在授权代码流程的第 4 步中进行了介绍)必须验证收到的
code_verifier在转换后是否与原始code_challenge匹配。
调试
您可以在 Logs Explorer 中查看详细的关联错误信息。如需启用和查看错误,请按照在 Google 控制台项目中监控账号关联错误中的说明操作。
Google 账号关联配置要求
如需了解 Google 账号关联配置,请参阅以下 API 指南。
如需成功注册 OAuth 集成,您需要配置有关授权服务器的具体详细信息。确保您已准备好以下端点、凭据和资产。
配置字段 |
说明 |
开发者责任 |
客户端 ID 和密钥 |
您的授权服务器专门为关联应用平台生成的唯一凭据。客户端密钥是与客户端 ID 关联的安全凭证(密码)。 注意:如果客户端 ID 是由开发者签发的,则必须由开发者提供。如果客户端 ID 是由 Google 签发的,开发者可能需要注册或验证密钥。 |
在所有授权请求中使用平台提供的 ID。 |
授权端点 |
用于重定向用户以进行身份验证和授权同意的网址 |
托管端点,例如 |
令牌端点 |
用于将授权代码交换为访问/刷新令牌以及刷新过期令牌的后端端点。 |
托管此端点,例如 https://yourdomain.com/oauth/token |
撤销端点 |
用于在用户断开连接时通知您的系统使令牌失效的网址。 当用户在“关联的应用”平台中解除关联或断开与您的集成的连接时,我们会向 /revoke 端点发出 POST 请求,其中包含访问令牌或刷新令牌。 |
托管端点,例如 您的服务器必须通过永久使所提供的令牌失效来处理此请求。这样可确保“关联的应用”平台后续尝试使用该令牌时都会失败,从而在断开关联后保障用户数据的安全。 |
重定向 URI |
平台提供的特定回调网址,授权服务器在用户同意后会将代码发送回该网址。 |
将您的授权服务器配置为仅接受来自平台的官方注册重定向 URI。 |
刷新 |
一种机制,允许关联的应用平台在当前访问令牌过期时获取新的访问令牌,从而保持集成无缝连接,而无需用户重复登录。 当现有访问令牌过期时,关联应用平台会自动向您的 |
您的服务器必须验证所提供的刷新令牌,并在 JSON 响应中返回新的访问令牌。此外,如需实现永久关联,您必须避免在此交换期间轮替刷新令牌。请勿签发新令牌,而是在 JSON 响应中返回完全相同的刷新令牌,并在后端延长其失效日期。 |
响应类型 |
此参数必须配置为 CODE,以支持授权代码流程。 |
|
镜 |
一组特定的权限和访问权限级别,用于定义令牌有权执行的操作。这些权限和访问权限级别必须在您的配置中预先定义,以便 Google 可以在初始授权握手期间请求它们。 |
您需要提供一个默认范围列表(例如 请求的范围应尽可能缩小(最小权限原则),但应完全足以支持 MCP 集成所支持的关键用户历程 (CUJ)。 |
界面素材资源:徽标 |
要在账号关联和权限请求页面上显示的开发者徽标。 |
必须是方形矢量图像 (SVG),外观为圆形,且尺寸至少为 500 x 500 像素。例如,请参阅 |
原生应用关联 (App Flip) |
为了支持直接从原生 Android 或 iOS 应用进行账号关联,我们强烈建议您不要依赖标准 WebView。相反,我们强烈建议您实现 App Flip,以提供顺畅的用户体验。 |
完成 Play 商店和应用商店验证,并将 Google 的重定向 URI 直接嵌入到您的原生应用中,以确保安全的应用到应用授权切换。 |
令牌有效期 |
(可选)访问令牌在需要刷新之前有效的时长。这对于在 GAL 中配置超时政策非常有用。 |
常见的到期时间从几分钟、几小时到几天不等,具体取决于安全需求,例如 |
常见集成错误
以下列出了集成过程中可能出现的常见错误和可能的解决方案。
- 缺少“code”授权:Gemini 平台的自动化系统会明确检查 response_types_supported 是否包含值“code”。
- 缺少注册端点:即使您的服务器支持客户端 ID 元数据文档,Gemini 应用(作为连接到您服务器的 OAuth 客户端)目前也要求在发现 JSON 中提供专用的 registration_endpoint。
- 非 200 错误:如果 Gemini 的自动化元数据发现机制访问您的 well-known 网址并收到 404 或 500 错误,则不会尝试猜测其他网址。请确保发现网址可公开访问。