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

