Ed25519 的 alg 值?

use*_*363 9 jwt ed25519 jose

RFC7518 具有JWT 中使用的算法值列表EdDSA然而,诸如 之类的没有任何价值Ed25519。在 Jose 验证时也不Ed25519接受作为有效值。正确的 alg 值是多少Ed25519

jps*_*jps 15

ED25519 是一种 EdDSA(爱德华兹曲线 DSA)签名方案。另请参阅RFC8037RFC8032

根据jose 文档 alg需要设置为EdDSA

JWS 算法:爱德华兹曲线 DSA
alg:EdDSA

EdDSA也在IANA 注册管理机构的JSON Web 签名和加密算法部分中列出(感谢 @Florent Morselli 的提示)


这里我展示了如何使用Node.js Cryptojose生成 ed25519 密钥对和签名令牌,然后使用 Python 中的公钥验证令牌:

生成密钥对和令牌:

const { SignJWT } = require('jose/jwt/sign')
const { generateKeyPairSync } = require('node:crypto')

const { publicKey, privateKey } = generateKeyPairSync('ed25519');
console.log(publicKey.export({format:'pem',type:'spki'}))
console.log(privateKey.export({format:'pem',type:'pkcs8'}))

const jwt = await new SignJWT({ 'id': 1 })
    .setProtectedHeader({ alg: 'EdDSA' })
    .setExpirationTime('2h')
    .sign(privateKey)

console.log(jwt)
Run Code Online (Sandbox Code Playgroud)

-----开始公钥-----
MCowBQYDK2VwAyEA7fySb/9h7hVH8j1paD5IoLfXj4prjfNLwOPUYKvsTOc=
-----结束公钥-----

-----开始私钥-----
MC4CAQAwBQYDK2VwBCIEIIJtJBnTuKbIy5YjoNiH95ky3DcA3kRB0I2i7DkVM6Cf
-----结束私钥-----

eyJhbGciOiJFZERTQSJ9.eyJpZCI6MX0.RAxBAQPFOxrCfgqb56eaAz9u2lByj-WEO- JWgJH3Cyx1o1Hwjn1pA2M4NgJeob9vb2Oaw4FOeYFr6_33XMTnAQ

解码后的令牌头:


{
  "alg": "EdDSA"
}
Run Code Online (Sandbox Code Playgroud)

使用PyJWT验证 Python 中的令牌:


{
  "alg": "EdDSA"
}
Run Code Online (Sandbox Code Playgroud)

注意: jwt.io目前不支持 EdDSA/ED25519 算法,因此您无法验证该站点上的令牌。我也不知道任何其他 JWT 网站可以验证 EdDSA 签名的令牌。