Postman实现jwt发送请求

javascript 复制代码
// Pre-request script
// 使用 CryptoJS(Postman 通常内置这个)
const generateJWT = () => {
    const issuer = "example.com";
    const secret = "secret_key";
    console.log("Generating JWT with issuer:", issuer);
    
    // Header
    const header = {
        "alg": "HS256",
        "typ": "JWT"
    };
    
    // Payload
    const payload = {
        "iss": issuer,
        "exp": Math.floor(Date.now() / 1000) + 3600,
        "iat": Math.floor(Date.now() / 1000),
        "sub": "postman-test",
        "name": "test"
    };
    
    try {
        // 方法2A: 使用 CryptoJS(如果可用)
        const base64Header = btoa(JSON.stringify(header)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
        const base64Payload = btoa(JSON.stringify(payload)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
        
        const data = base64Header + "." + base64Payload;
        
        // 简单的HMAC-SHA256实现
        const signature = CryptoJS.HmacSHA256(data, secret);
        const base64Signature = CryptoJS.enc.Base64.stringify(signature)
            .replace(/\+/g, '-')
            .replace(/\//g, '_')
            .replace(/=+$/, '');
        
        const token = data + "." + base64Signature;
        
        pm.environment.set("jwt_token", token);
        console.log("JWT生成成功:", token);
        return token;
        
    } catch (error) {
        console.log("CryptoJS方法失败:", error);
        
        // 方法2B: 使用纯JavaScript的简单实现(用于测试)
        const simpleToken = generateSimpleJWT(header, payload, secret);
        pm.environment.set("jwt_token", simpleToken);
        console.log("使用简单方法生成的JWT:", simpleToken);
        return simpleToken;
    }
};

// 简单的JWT生成函数(用于测试)
function generateSimpleJWT(header, payload, secret) {
    const base64Header = btoa(JSON.stringify(header))
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=+$/, '');
    
    const base64Payload = btoa(JSON.stringify(payload))
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=+$/, '');
    
    // 注意:这是一个简化的签名,仅用于测试
    const fakeSignature = "test_signature_only_for_debugging";
    
    return base64Header + "." + base64Payload + "." + fakeSignature;
}

// 生成JWT
generateJWT();

设置headers

key jwt

value {{jwt_token}}

相关推荐
我的xiaodoujiao2 小时前
3、API 接口自动化测试详细图文教程学习系列3--相关Python基础知识2
python·学习·测试工具·pytest
紫丁香2 小时前
Postman 自动化测试完全指南1
接口测试·postman
小陈的进阶之路4 小时前
接口测试分析及用例设计
测试工具
123过去4 小时前
impacket-mssqlclient使用教程
linux·测试工具·安全
Saniffer_SH5 小时前
【高清视频】实验室搭建PCIe 6.0测试环境需要的retimer卡介绍
服务器·驱动开发·测试工具·fpga开发·计算机外设·硬件架构·压力测试
苦瓜小生6 小时前
AI-TestHub:我如何从零开发一个智能测试用例生成平台
人工智能·python·测试工具·github·测试用例·fastapi
我的xiaodoujiao6 小时前
4、API 接口自动化测试详细图文教程学习系列4--相关Python基础知识3
python·学习·测试工具·pytest
测试19988 小时前
单元测试、系统测试、集成测试的区别是什么?
自动化测试·软件测试·测试工具·单元测试·测试用例·集成测试·安全性测试