我想对我遇到的以下问题发表评论。我正在IONIC中创建一个令牌,为此我使用了CryptoJS库。在创建签名时,它给我的数字与我期望的完全不同。我期望的签名是lLJuDJVb4DThZq / yP4fgYOk / 14d3piOvlSuWEI / E7po =,给我方法的签名如下:94b26e0c955be034e166aff23f87e060e93fd78777a623af952b96108fc4ee9a 我已经阅读了文档,我想我缺少了一些东西,但是我无法抓住它。我在下面留下代码:
GenerarToken(data)
{
let datos:string = btoa(JSON.stringify(data));
let encabezado:string = btoa(JSON.stringify({
"typ": "JWT",
"alg": "HS256"
}));
let unido:string = encabezado + "." + datos;
var llave = CryptoJS.HmacSHA256(unido, key).toString();
let token = unido + '.' + llave;
return token;
}
关于标头和有效负载,我同意,我只有在创建签名时才有问题。
答案 0 :(得分:0)
您似乎正在期待以base64编码的输出,但是正在获取十六进制输出,因为这是默认设置。尝试传递编码:
var llave = CryptoJS.HmacSHA256(unido, key).toString(CryptoJS.enc.Base64);
记录在https://github.com/jakubzapletal/crypto-js#the-hasher-output