我正在使用 node-jws 包(https://www.npmjs.com/package/jws)在 JavaScript 中生成 JSON Web 签名。在标题中,我给出了 crit: ["exp"] 和 exp: someTimeStamp。下面给出的代码片段用于生成 JWS:
let token = jws.sign({
header: { alg: 'HS256', crit: ["exp"], exp: Math.floor(Date.now() / 1000) + (60 * 60) },
payload: "somestring" ,
privateKey: 'supersecret',
});
我正在使用下面给出的代码片段在 Golang 中验证这个令牌:
import (
"github.com/square/go-jose"
)
func main() {
jsonWebSig, err := jose.ParseSigned(token)
if err != nil {
panic(err)
}
payload, err := jsonWebSig.Verify([]byte("supersecret"))
fmt.Println(string(payload))
fmt.Println(err)
}
如果我在 JS 中生成令牌时没有在标题中给出 crit: ["exp"] ,则 GO 中的上述代码有效。否则,它会给我错误的说法square/go-jose: error in cryptographic primitive
。
我必须不惜一切代价在标题中使用 crit: ["exp"] 。有没有办法验证这一点?