如何在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
相关产品推荐
相关产品推荐

