Agent Engine的 OAuth2授权请求中缺少response_type参数
通过Agent Engine使用自定义代理时,预览界面(Vertex AI Search)生成的OAuth2 /authorize 调用由于缺少强制性的 response_type=code 参数而失败。
重现步骤:
- 创建了一个Gemini Enterprise应用并通过Agent Engine连接了一个自定义代理。
- 通过提供
client_id、client_secret、token_uri和authorization_uri来配置授权。 - 启用代理后,前往 应用 > 概览 以预览代理。
- 输入触发自定义工具/代理的提示。
- 在请求时点击提示中的“授权”。
- 浏览器重定向到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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。