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

相关推荐
Smoothcloud润云5 小时前
从“预测下一个词”到“预测下一个世界状态”:世界模型作为AGI新范式的深度分析报告
人工智能·测试工具·微服务·容器·github·状态模式·agi
测试19989 小时前
postman接口测试详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
测试秃头怪13 小时前
python&selenium自动化测试实战项目详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
简单点了15 小时前
mac安装wireshark
测试工具·macos·wireshark
西瓜程序猿1 天前
使用手机如何将纸质礼薄转换为电子礼薄?
测试工具·智能手机·创业创新·记了么·电子礼薄·份子钱
半个俗人2 天前
fiddler的基础使用
前端·测试工具·fiddler
站长工具箱2 天前
基于浏览器的键盘按键测试工具功能解析
测试工具·计算机外设
小陈的进阶之路2 天前
Selenium 滑动 vs Appium 滑动
python·selenium·测试工具·appium
程序员小远2 天前
软件测试用例总结
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
爱丽_3 天前
软件测试基础分类与核心概念整理
功能测试·测试工具·测试用例