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

如何在Node.js中使用Google API服务账号生成签名JWT

Google服务账号生成签名JWT(Node.js/Express环境)

1. 前置准备

  • 已在Google Cloud Console完成服务账号创建,下载了JSON格式的密钥文件,将密钥文件存放在Express项目的安全目录下,禁止提交到代码仓库
  • 已和自研Java后端约定好JWT校验所需的audience(受众)字段值

2. 安装官方依赖

使用Google官方维护的认证库,无需手动实现签名逻辑,避免安全风险:

npm install google-auth-library

3. 封装JWT生成工具函数

const { JWT } = require('google-auth-library');
// 引入服务账号密钥文件,生产环境建议从环境变量或者密钥管理服务读取
const serviceAccount = require('./path/to/your-service-account-key.json');

/**
 * 生成Google服务账号签名的JWT
 * @param {string} audience 与Java后端约定的受众值
 * @param {number} expiresIn 过期时间,单位秒,默认3600(1小时)
 * @returns {Promise<string>} 签名后的JWT字符串
 */
async function generateGoogleSignedJwt(audience, expiresIn = 3600) {
  const jwtClient = new JWT({
    email: serviceAccount.client_email,
    key: serviceAccount.private_key,
    expiresIn: expiresIn,
  });

  // 生成自签名JWT,不需要请求Google OAuth服务器获取access token
  const signedJwt = await jwtClient.createSignedJwt({
    aud: audience,
    // 可选:添加自定义载荷字段,和Java后端约定即可
    // additional_claims: {
    //   user_id: 'xxx',
    //   scope: 'xxx'
    // }
  });

  return signedJwt;
}

module.exports = { generateGoogleSignedJwt };

4. 接口调用时使用

在你需要调用Java后端的Express业务逻辑中,调用上述方法生成JWT,放到请求头中传递即可:

const axios = require('axios');
const { generateGoogleSignedJwt } = require('./utils/jwt-util');

// 示例Express接口
app.get('/call-java-api', async (req, res, next) => {
  try {
    const jwt = await generateGoogleSignedJwt('https://your-java-service-audience');
    // 调用Java后端接口
    const javaResponse = await axios.get('https://your-java-service-url/api/xxx', {
      headers: {
        Authorization: `Bearer ${jwt}`
      }
    });
    res.json(javaResponse.data);
  } catch (err) {
    next(err);
  }
});

注意事项

  • 生产环境不要明文存储服务账号密钥文件,建议通过环境变量注入、云厂商密钥管理服务读取的方式获取密钥内容
  • JWT过期时间建议设置在15分钟到1小时之间,不要设置过长,降低泄露风险
  • 载荷中的aud字段必须和Java后端校验时的取值完全一致,否则会校验失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:04