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

如何为GCP服务账号生成含自定义iss的有效签名JWT适配API网关与云函数

解决方案:生成兼容API网关与云函数的自定义签名JWT

核心要求梳理

先明确两个服务的JWT验证规则:

  • API网关:必须匹配你OpenSpec配置的自定义iss值,签名需通过网关预设的验证方式(JWKS/公钥)。
  • 云函数:要求iss为服务账号邮箱,Payload必须包含email(同服务账号邮箱)、email_verified: true,aud为云函数的完整HTTP触发URL,签名必须使用该服务账号的私钥。

准备工作

确保你已拥有:

  • 从GCP控制台下载的服务账号私钥JSON文件
  • Node.js环境,并安装依赖:npm install jsonwebtoken

1. 生成兼容API网关的JWT(自定义iss)

const jwt = require('jsonwebtoken');
const fs = require('fs');

// 加载服务账号私钥
const keyPath = '/path/to/your-service-account-key.json';
const privateKey = fs.readFileSync(keyPath);
const serviceAccount = JSON.parse(fs.readFileSync(keyPath));

const payload = {
  iss: '你的自定义iss值(与OpenSpec的securityDefinition配置完全一致)',
  sub: serviceAccount.client_email,
  aud: 'API网关URL或OpenSpec中配置的audience值',
  exp: Math.floor(Date.now() / 1000) + 3600, // 有效期1小时,不超过GCP限制
  iat: Math.floor(Date.now() / 1000)
};

// 生成JWT,必须用RS256算法
const apiGatewayToken = jwt.sign(payload, privateKey, { algorithm: 'RS256' });
console.log('API网关可用Token:', apiGatewayToken);

2. 生成兼容云函数的JWT

const jwt = require('jsonwebtoken');
const fs = require('fs');

// 加载服务账号私钥
const keyPath = '/path/to/your-service-account-key.json';
const privateKey = fs.readFileSync(keyPath);
const serviceAccount = JSON.parse(fs.readFileSync(keyPath));

const payload = {
  iss: serviceAccount.client_email,
  sub: serviceAccount.client_email,
  email: serviceAccount.client_email,
  email_verified: true,
  aud: 'https://your-region-your-project.cloudfunctions.net/your-function', // 云函数完整触发URL
  exp: Math.floor(Date.now() / 1000) + 3600,
  iat: Math.floor(Date.now() / 1000)
};

// 生成JWT,必须用RS256算法
const cloudFunctionToken = jwt.sign(payload, privateKey, { algorithm: 'RS256' });
console.log('云函数可用Token:', cloudFunctionToken);

可选:让单个JWT兼容两个服务

如果可以修改API网关的OpenSpec配置,将securityDefinitions中的iss值改为服务账号邮箱,那么只需生成一份包含email、email_verified字段,且iss为服务账号邮箱的JWT,即可同时访问API网关和云函数。

内容的提问来源于stack exchange,提问作者Mitesh Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:44