【问题标题】:JWT signing with k6使用 k6 进行 JWT 签名
【发布时间】:2018-03-27 19:27:57
【问题描述】:

如何使用k6 对带有JWT 签名的JSON 对象进行编码?

export default function() {

  const mySecret = "aaaaaaa";
  const token = jwt.sign({ foo: 'bar' }, mySecret, { algorithm: 'RS256'});

}

【问题讨论】:

    标签: javascript jwt load-testing k6


    【解决方案1】:

    您可以使用内置的 k6/encodingk6/crypto 模块来处理 JWT。

    由于k6/crypto 模块尚不支持公钥加密,您只能使用共享密钥来签署您的 JWT(无需在纯 JS 中进行加密)。

    这是一个示例脚本:

    import crypto from "k6/crypto";
    import encoding from "k6/encoding";
    
    const algToHash = {
        HS256: "sha256",
        HS384: "sha384",
        HS512: "sha512"
    };
    
    function sign(data, hashAlg, secret) {
        let hasher = crypto.createHMAC(hashAlg, secret);
        hasher.update(data);
    
        // Some manual base64 rawurl encoding as `Hasher.digest(encodingType)`
        // doesn't support that encoding type yet.
        return hasher.digest("base64").replace(/\//g, "_").replace(/\+/g, "-").replace(/=/g, "");
    }
    
    function encode(payload, secret, algorithm) {
        algorithm = algorithm || "HS256";
        let header = encoding.b64encode(JSON.stringify({ typ: "JWT", alg: algorithm }), "rawurl");
        payload = encoding.b64encode(JSON.stringify(payload), "rawurl");
        let sig = sign(header + "." + payload, algToHash[algorithm], secret);
        return [header, payload, sig].join(".");
    }
    
    function decode(token, secret, algorithm) {
        let parts = token.split('.');
        let header = JSON.parse(encoding.b64decode(parts[0], "rawurl"));
        let payload = JSON.parse(encoding.b64decode(parts[1], "rawurl"));
        algorithm = algorithm || algToHash[header.alg];
        if (sign(parts[0] + "." + parts[1], algorithm, secret) != parts[2]) {
            throw Error("JWT signature verification failed");
        }
        return payload;
    }
    
    export default function() {
        let message = { key2: "value2" };
        let token = encode(message, "secret");
        console.log("encoded", token);
        let payload = decode(token, "secret");
        console.log("decoded", JSON.stringify(payload));
    }
    

    【讨论】:

    • 嗨,有没有办法使用 PS256 算法代替 SHA ?
    猜你喜欢
    • 2022-09-11
    • 2018-05-04
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2023-01-08
    • 2018-09-16
    • 2019-10-30
    • 2016-08-01
    相关资源
    最近更新 更多