如何在node.js

时间:2018-07-03 11:28:31

标签: node.js express oauth-2.0 jwt

我需要一个令牌来向服务器进行身份验证,我正在使用jsonwebtoken,但是它仅在令牌的标头为

时才有效
{
  "alg": "RS256"
}

不是

{
  "alg": "RS256",
  "typ": "JWT"
}

jsonwebtoken的默认标头是第二个标头,我尝试按照此处https://github.com/auth0/node-jsonwebtoken的说明将标头设置为with选项,但是没有示例,所以也许我做错了,但是{{ 1}}选项有效,因此... doc中有此行“可以通过options.header对象自定义标题。” ,我认为我不明白这一点。

noTimestamp

但是它只是什么都不会改变,所以如果有人知道如何设置标题?

预先感谢

3 个答案:

答案 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参数,则会创建一个标头,其中包含根据该参数的附加键/值对。如果参数包含typalg的其他值,则将采用参数中的值。 在下面的示例中,我覆盖了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"
}