首页 > 解决方案 > JWT 使用算法 ES256 生成令牌

问题描述

我正在尝试使用算法 ES256 生成 accessToken,并使用以下非常非常简单的代码:

const jwt = require('jsonwebtoken')

const accessToken = jwt.sign(
  { name: 'John' },
  'testsecret',
  { expiresIn: '24h' },
  { algorithm: 'ES256' }
)

console.log(accessToken)

我得到了一个令牌,如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiIsImlhdCI6MTYxNDY4MzUxNCwiZXhwIjoxNjE0NzY5OTE0fQ.Q9quAufyTQvPvKrTUXzRDUo-o0M4yXSXjqU4vZ9nvvA

我尝试将其粘贴到 jwt.io,它似乎是 HS256 令牌而不是 ES256,我错过了什么吗?

有些事情我做的不对。您可以随时将上面的代码粘贴到 nodejs 中,您会看到。

标签: javascriptnode.jsauthenticationjwt

解决方案


您只需要组合expiresInalgorithm参数 - 该模块采用单个选项对象:

const jwt = require('jsonwebtoken');
const privatekey = `-----BEGIN EC PRIVATE KEY-----
MHcCAQEEICXoLhGdD6jzX5ePTY9O9YBgv0ZZ6oBWDRsjKaeASXp6oAoGCCqGSM49
AwEHoUQDQgAELCnuRSU9Vf+bx65i3Vbibj123RQFrIEaXuMuXunzPXGURKge07fy
FoiMucdGZ2MZGsm37JdlnVGd5yU1h4D4Rg==
-----END EC PRIVATE KEY-----`

const payload = {"id":1}

const accessToken = jwt.sign(payload, privatekey, {
  expiresIn: "24h",
  algorithm: "ES256",
});

推荐阅读