首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用k6的JWT签名

使用k6的JWT签名
EN

Stack Overflow用户
提问于 2017-10-16 17:56:52
回答 1查看 1.1K关注 0票数 2

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

代码语言:javascript
复制
export default function() {

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

}
EN

回答 1

Stack Overflow用户

发布于 2017-10-17 16:37:28

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

因为k6/crypto模块还不支持公钥加密,所以您只能使用共享密钥对JWT进行签名(不需要在纯JS中进行加密)。

下面是一个示例脚本:

代码语言:javascript
复制
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));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46767543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档