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

Postman预请求脚本如何获取Vault实际值?求Vault数据注入方案

Postman Vault 凭据在预请求脚本中获取实际值及注入签名的解决方法

问题场景

在Postman v11.14.1的团队共享工作区中,已将所有凭据(如DEV_SYS1_CLIENT_ID、STAGE_SYS1_CLIENT_ID)存入Postman Vault以避免云端存储。创建了Dev、Stage等环境,环境变量通过{{vault:DEV_SYS1_CLIENT_ID}}这类语法引用Vault条目。SOAP请求的<soap:Header>中需要引用{{SYS1_CLIENT_ID}}作为<clientId>,同时<signature>需通过预请求脚本基于实际clientId计算。但使用pm.environment.get("SYS1_CLIENT_ID")时,返回的是占位符字符串而非Vault中的实际值,需要解决如何获取实际值并合规注入计算后的签名。

解决方案

1. 直接从Vault获取实际值

Postman提供pm.vault.get()方法可直接读取Vault条目值,为适配不同环境,可通过解析环境变量中的占位符动态获取对应Vault键:

// 读取环境变量中的Vault占位符
const vaultPlaceholder = pm.environment.get("SYS1_CLIENT_ID");
// 正则提取Vault条目名称(如从{{vault:DEV_SYS1_CLIENT_ID}}中提取DEV_SYS1_CLIENT_ID)
const vaultKey = vaultPlaceholder.match(/{{vault:(.*?)}}/)[1];
// 获取Vault中的实际凭据值
const clientId = pm.vault.get(vaultKey);

该方法无需将凭据存入环境变量,直接从Vault读取,符合安全要求。

2. 计算签名并注入请求体

拿到实际clientId后完成签名计算,再将签名值注入SOAP请求体,示例代码如下:

// 示例:根据clientId计算签名(替换为你的实际签名逻辑)
function generateSignature(clientId) {
    // 这里编写签名生成代码,比如哈希、加密等操作
    return btoa(clientId + Date.now().toString());
}

// 获取实际clientId(复用上述代码)
const vaultPlaceholder = pm.environment.get("SYS1_CLIENT_ID");
const vaultKey = vaultPlaceholder.match(/{{vault:(.*?)}}/)[1];
const clientId = pm.vault.get(vaultKey);

// 计算签名
const signature = generateSignature(clientId);

// 更新请求体中的signature占位符(假设请求体中用{{SIGNATURE}}作为占位符)
let rawBody = pm.request.body.raw;
rawBody = rawBody.replace("{{SIGNATURE}}", signature);
pm.request.body.raw = rawBody;

若SOAP请求体结构复杂,也可使用Postman内置的xml2js库解析XML后修改对应节点,再转回XML格式。

3. 权限与安全注意事项

  • 确保团队成员拥有对应Vault条目的读取权限,否则pm.vault.get()会返回undefined。
  • pm.vault.get()获取的值不会出现在Postman的请求历史、日志或云端存储中,符合安全合规要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:23:09