我需要一个令牌来向服务器进行身份验证,我正在使用jsonwebtoken
,但是它仅在令牌的标头为
{
"alg": "RS256"
}
不是
{
"alg": "RS256",
"typ": "JWT"
}
和jsonwebtoken
的默认标头是第二个标头,我尝试按照此处https://github.com/auth0/node-jsonwebtoken
的说明将标头设置为with选项,但是没有示例,所以也许我做错了,但是{{ 1}}选项有效,因此...
doc中有此行“可以通过options.header对象自定义标题。” ,我认为我不明白这一点。
noTimestamp
但是它只是什么都不会改变,所以如果有人知道如何设置标题?
预先感谢
答案 0 :(得分:1)
var h = {"alg":"PS256", "typ":"unknown", "kid":"5FZT6gTLM5wEoSGn3eW0Q8zCPsQ"};
var i = 'ClientId';
var s = 'ClientId';
var a = 'bla';
var signOptions = {
issuer: i,
header: h,
subject: s,
audience: a,
expiresIn: "1h"
};
var token = jwt.sign(payload, privateKEY, signOptions);
产生此标头:
{
"alg": "PS256",
"typ": "unknown",
"kid": "5FZT6gTLM5wEoSGn3eW0Q8zCPsQ"
}
答案 1 :(得分:0)
函数jwt.sign()
创建一个默认的标头,如下所示:
{
"alg": <algorithm>,
"typ": "JWT"
}
如果存在header
参数,则会创建一个标头,其中包含根据该参数的附加键/值对。如果参数包含typ
或alg
的其他值,则将采用参数中的值。
在下面的示例中,我覆盖了typ
的值并添加了一个额外的密钥x
:
jwt.sign(payload, pvtKey,
{ algorithm: 'RS256', noTimestamp : true, header: {"typ":"unknown", "x":"y"} }
结果是这个标题:
{
"alg": "RS256",
"typ": "unknown",
"x": "y"
}
结论:它可以工作,您可以自定义标头,但不能摆脱两个标准值。
答案 2 :(得分:0)
如果要从标题中删除默认值 你也可以设置 undefined
例如:
jwt.sign({ "hello": "world" }, key, { algorithm: "none", header: { typ: undefined } })
产生一个 jwt,它具有
有效载荷:
{
"hello": "world",
"iat": 1627481195
}
和签名
{
"alg": "none"
}