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

相关推荐
程序员小远7 小时前
Postman接口测试: Postman环境变量&全局变量设置,多接口顺序执行详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
天才测试猿7 小时前
Postman使用方法
自动化测试·软件测试·测试工具·职场和发展·测试用例·接口测试·postman
程序员三藏7 小时前
Postman定义公共函数
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
安冬的码畜日常7 小时前
【JUnit实战3_26】第十五章:表现层测试(下)—— Selenium 在网页测试中的用法
selenium·测试工具·junit·gui测试·junit5·表现层测试
程序员三藏21 小时前
Postman持久化保存/设置断言详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
测试19981 天前
如何写出一个完整的测试用例?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
我的xiaodoujiao1 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 22--数据驱动--参数化处理 Json 文件
python·学习·测试工具·pytest
安冬的码畜日常1 天前
【JUnit实战3_23】 第十四章:JUnit 5 扩展模型(Extension API)实战(上)
测试工具·junit·单元测试·jdbc·h2·extension模型·junit5扩展
安冬的码畜日常2 天前
【JUnit实战3_22】 第十三章:用 JUnit 5 做持续集成(下):Jenkins + JUnit 5 + Git 持续集成本地实战演练完整复盘
git·测试工具·ci/cd·jenkins·集成测试·持续集成·junit5