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

如何在Postman生成签名JWT以证书方式请求Azure访问令牌访问Key Vault

可以直接在Postman中生成签名JWT完成令牌请求,不需要依赖PowerShell或pfx文件,通过Postman内置的预请求脚本能力即可实现,具体操作步骤如下:

前置确认

先确认你已经完成的配置符合要求:

  • 已在Azure AD应用注册中上传了对应证书的公钥
  • 已在Postman全局/工作区设置的「Certificates」板块添加了该证书(包含私钥),证书指纹和应用注册中上传的证书指纹一致
步骤1:添加预请求脚本

打开你用于请求Azure AD令牌的Postman请求,切换到「Pre-request Script」标签,粘贴如下代码,替换代码开头的三个占位参数为你自己的实际值:

// 替换为你自己的配置
const tenantId = "你的Azure租户ID";
const clientId = "你的应用注册客户端ID";
const certThumbprint = "你的证书SHA1指纹,全大写无分隔符";

// 生成JWT头
const header = {
    "alg": "RS256",
    "typ": "JWT",
    "x5t": CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(certThumbprint))
        .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
};

// 生成JWT载荷
const now = Math.floor(Date.now() / 1000);
const payload = {
    "iss": clientId,
    "sub": clientId,
    "aud": `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`,
    "exp": now + 3600,
    "nbf": now,
    "jti": CryptoJS.lib.WordArray.random(16).toString()
};

// 编码头和载荷
const encodedHeader = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(header)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
const encodedPayload = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(payload)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

// 拼接待签名内容
const signContent = `${encodedHeader}.${encodedPayload}`;

// 用Postman已配置的证书签名
const signature = pm.certificate.sign(certThumbprint, signContent, 'RS256')
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

// 生成完整JWT并存入变量
const clientAssertion = `${encodedHeader}.${encodedPayload}.${signature}`;
pm.variables.set("clientAssertion", clientAssertion);
步骤2:配置令牌请求参数

请求地址为POST https://login.microsoftonline.com/{替换为你的租户ID}/oauth2/v2.0/token,请求体选择form-data格式,添加以下参数:

  • grant_type: client_credentials
  • client_id: 你的应用注册客户端ID
  • client_assertion_type: urn:ietf:params:oauth:client-assertion-type:jwt-bearer
  • client_assertion: {{clientAssertion}}
  • scope: https://vault.azure.net/.default
步骤3:执行请求

直接点击「Send」即可获取到访问Key Vault的有效令牌,后续请求Key Vault接口时在请求头带上Authorization: Bearer {返回的access_token}即可正常访问。

注意事项
  • 证书必须包含私钥,仅上传公钥到Postman无法完成签名
  • 证书指纹请使用SHA1格式,移除所有分隔符后转为全大写再填入脚本
  • JWT的过期时间最长不要超过24小时,超过限制Azure AD会直接拒绝断言请求
  • 如果需要请求其他Azure资源,将scope参数替换为对应资源的.default后缀标识即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 15:06:04