Agent Engine的 OAuth2授权请求中缺少response_type参数

人工智能 2026-07-09

通过Agent Engine使用自定义代理时,预览界面(Vertex AI Search)生成的OAuth2 /authorize 调用由于缺少强制性的 response_type=code 参数而失败。

重现步骤:

  1. 创建了一个Gemini Enterprise应用并通过Agent Engine连接了一个自定义代理。
  2. 通过提供 client_idclient_secrettoken_uriauthorization_uri 来配置授权。
  3. 启用代理后,前往 应用 > 概览 以预览代理。
  4. 输入触发自定义工具/代理的提示。
  5. 在请求时点击提示中的“授权”。
  6. 浏览器重定向到IdP,但IdP返回“不受支持的响应类型”错误。

在失败期间拦截的生成URL为:oauth2/<authServerId>/v1/authorize?client_id=abc123&state=xxx&code_challenge=uuu&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Foauth-redirect

查询字符串中完全缺少 response_type 参数。

我期望该URL包含 &response_type=code,以符合标准的OAuth2授权码授权流程。

这是否可以确认为Agent Engine请求生成器中的一个错误?

是否有办法通过Agent Engine Reasoning Engine的配置手动追加或强制 response_type

解决方案

目前在Agent Engine中没有官方的配置选项可以手动强制此参数,但你可以通过一个中间件将授权请求代理过去,在转发给IdP之前注入缺失的参数。

from flask import Flask, request, redirect

app = Flask(__name__)

AUTH_URI = "https://your-idp.com/oauth2/v1/authorize"

@app.route("/oauth2-proxy/authorize")
def authorize():
    params = request.args.to_dict()
    params.setdefault("response_type", "code")
    query_string = "&".join(f"{k}={v}" for k, v in params.items())
    return redirect(f"{AUTH_URI}?{query_string}")

if __name__ == "__main__":
    app.run(port=8080)

然后你可以将Agent Engine的 authorization\_uri 指向这个代理,而不是直接指向你的IdP,并通过 Google Cloud问题追踪器 引用缺失的 response\_type 参数来报告该错误,以便在Agent Engine请求生成器中得到修补。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章