gpt4 book ai didi

jwt - Ed25519 的 alg 值?

转载 作者:行者123 更新时间:2023-12-05 01:30:40 26 4
gpt4 key购买 nike

RFC7518 有一个 list of algorithms values在 JWT 中使用。但是 EdDSA 没有值,例如 Ed25519。此外,在 Jose 中验证时,Ed25519 不被接受为有效值。 Ed25519 的正确算法值是多少?

最佳答案

ED25519 是一个 EdDSA ( Edwards-curve DSA ) 签名方案。另见 RFC8037RFC8032 .

根据jose documentation alg需要设置为EdDSA:

JWS Algorithm: Edwards-curve DSA
alg: EdDSA

EdDSA 也列在 section JSON Web Signature and Encryption Algorithms 中IANA 注册管理机构(感谢@Florent Morselli 的提示)


在这里,我展示了一个示例,说明如何使用 jose 在 Node.js 中生成 ed25519 key 对和签名 token 。和加密,然后使用 Python 中的公钥验证 token :

生成 key 对和 token :

const { SignJWT } = require('jose/jwt/sign')
const { generateKeyPairSync } = require('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)

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA7fySb/9h7hVH8j1paD5IoLfXj4prjfNLwOPUYKvsTOc=
-----END PUBLIC KEY-----

-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIIJtJBnTuKbIy5YjoNiH95ky3DcA3kRB0I2i7DkVM6Cf
-----END PRIVATE KEY-----

eyJhbGciOiJFZERTQSJ9.eyJpZCI6MX0.RAxBAQPFOxrCfgqb56eaAz9u2lByj-WEO-JWgJH3Cyx1o1Hwjn1pA2M4NgJeob9vb2Oaw4FOeYFr6_33XMTnAQ

解码后的 token 头:


{
"alg": "EdDSA"
}

使用 PyJWT 在 Python 中验证 token :

import jwt

public_key = """-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA7fySb/9h7hVH8j1paD5IoLfXj4prjfNLwOPUYKvsTOc=
-----END PUBLIC KEY-----"""

token = 'eyJhbGciOiJFZERTQSJ9.eyJpZCI6MX0.RAxBAQPFOxrCfgqb56eaAz9u2lByj-WEO-JWgJH3Cyx1o1Hwjn1pA2M4NgJeob9vb2Oaw4FOeYFr6_33XMTnAQ'

decoded = jwt.decode(token, public_key, algorithms='EdDSA', verify=True)
print(decoded)

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

关于jwt - Ed25519 的 alg 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66893790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com