You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud Functions:如何放行OPTIONS预检请求并保留认证限制

解决方案:通过IAM条件放行OPTIONS请求

你可以利用GCP IAM的条件表达式实现仅放行OPTIONS请求,同时保留其他请求的认证限制,无需开放全局未认证访问。具体操作如下:

步骤1:配置IAM权限规则

  1. 打开GCP控制台,进入目标Cloud Function的详情页面
  2. 切换到「权限」标签页,点击「添加权限」
  3. 在「新主体」输入框中填写 allUsers(代表所有用户,包括未认证用户)
  4. 在「角色」下拉菜单中选择「Cloud Functions > Cloud Functions Invoker」
  5. 点击「添加条件」,在条件编辑器中输入以下CEL表达式:
    request.method == "OPTIONS"
    
  6. 给条件设置一个名称(比如「Allow OPTIONS preflight requests」),然后保存权限配置

步骤2:保留并优化函数内的CORS处理

你的现有CORS代码可以继续使用,但需要注意:当请求携带认证信息(如Authorization头)时,Access-Control-Allow-Origin不能设为*,必须指定具体的前端域名,同时要添加允许凭据的头。优化后的代码示例:

// 替换成你的前端实际域名
const allowedOrigin = 'https://your-frontend-domain.com';
res.set('Access-Control-Allow-Origin', allowedOrigin);
res.set('Access-Control-Allow-Credentials', 'true');

if (req.method === 'OPTIONS') {
  res.set('Access-Control-Allow-Methods', 'GET');
  res.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.set('Access-Control-Max-Age', '3600');
  res.status(204).send('');
}

原理说明

GCP的IAM条件会在函数的认证检查之前生效:

  • 当浏览器发送OPTIONS预检请求时,由于匹配request.method == "OPTIONS"的条件,allUsers的调用权限会被触发,请求可以顺利到达函数内的CORS处理逻辑,返回正确的预检响应头
  • 对于GET/POST等其他请求,因为不满足条件,仍然需要符合原有的GCP认证要求才能调用函数,不会开放未认证访问

内容的提问来源于stack exchange,提问作者László Stahorszki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:45:11