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}}

相关推荐
程序员小远4 天前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
LT10157974444 天前
2026年Web自动化测试工具选型指南:多浏览器兼容解决方案
前端·测试工具·自动化
程序员三藏5 天前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
专业机床数据采集5 天前
基于 Wireshark 抓包逆向设备通信协议,并用 C# UDP协议跨平台 实现宝元数控程序列表读取、上传、下载和删除
网络·测试工具·wireshark·程序传输·宝元数控·dnc·数控程序传输
程序员龙叔5 天前
从 0 开始学习 AI 测试 - 从接口测试来教你如何用 AI 来生成自动化测试代码
自动化测试·软件测试·python·软件测试工程师·测试工具·性能测试·ai测试
Saniffer_SH5 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
川石课堂软件测试5 天前
APP自动化测试|高级手势操作&toast操作
css·功能测试·测试工具·microsoft·fiddler·单元测试·harmonyos
LT10157974445 天前
2026年开源自动化测试工具选型指南:功能与适用场景解析
测试工具·开源·自动化
大叔带刺6 天前
AutoSAR SomeIP配置开发速成_02测试工具开发
测试工具·someip