0
A
回答
2
您可以使用內置的k6/encoding和k6/crypto模塊,JWTs工作。
由於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));
}
相關問題
- 1. JWT無效簽名
- 2. JWT「簽名驗證失敗」,使用PHP
- 3. 使用System.IdentityModel.Tokens.Jwt驗證JWT簽名與RS512
- 4. C#不能使用證書籤名JWT
- 5. 在Spring Boot中使用Keycloak實現JWT,JWE和JWS(簽名JWT)
- 6. JWT令牌無效簽名
- 7. JWT計算簽名SHA256withRSA
- 8. Kong JWT無效簽名
- 9. JSON Web簽名(Ninbus-JOSE-JWT)
- 10. 瞭解JWT的RSA簽名
- 11. jwt簽名:RS256或HS256
- 12. PHP JWT無效簽名
- 13. 如何使用帶簽名證書的C#JWT包對JWT進行解碼
- 14. 使用帶有AES256簽名憑據的jwt
- 15. 使用RSA公鑰驗證JWT簽名PHP
- 16. 使用erlang計算Google OAuth服務帳戶的JWT簽名?
- 17. 使用公共密鑰端點驗證JWT簽名
- 18. JWT簽名不匹配本地計算的簽名
- 19. 創建沒有簽名的JWT令牌?
- 20. 「無效簽名」JWT令牌Opentok
- 21. JWT簽名不在PHP中驗證
- 22. Firebase JWT:簽名驗證失敗
- 23. JWT簽名驗證失敗,JAVA到PHP
- 24. 驗證JWT簽名時出現SecurityTokenSignatureKeyNotFoundException
- 25. 獲得已簽名JWT的Keycloak權利
- 26. 如何在Azure API管理中使用validate-jwt策略驗證使用RS256算法簽名的JWT
- 27. 用.NET 5.0中的PEM私鑰簽名帶RS256的JWT令牌
- 28. django-restframework-jwt使用JWT令牌時要求輸入用戶名/密碼
- 29. 使用SHA256withRSA算法驗證WSO2 API網關JWT簽名的C#.NET代碼
- 30. 使用RSA256(不對稱)簽名JWT時,甚至需要共享密鑰嗎?