RFC7518有一个用于JWT的算法值列表。但是,EdDSA没有任何价值,比如Ed25519。此外,在Jose中验证时,Ed25519不被接受为有效值。Ed25519的正确alg值是多少?
发布于 2021-03-31 19:22:08
ED25519是一种EdDSA (Edwards曲线DSA)签名方案。另见RFC8037和RFC8032。
根据何塞文件,需要将alg设置为EdDSA
JWS算法:Edwards曲线DSA alg: EdDSA
EdDSA也被列在IANA注册表的JSON签名和加密算法部分中(谢谢@Florent的提示)
在这里,我展示了一个示例,如何在Node.js中用荷西和荷西生成一个荷西键和一个签名令牌,然后用荷西中的公钥验证令牌:
生成密钥对和令牌:
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)-开始公开密钥 MCowBQYDK2VwAyEA7fySb/9h7hVH8j1paD5IoLfXj4prjfNLwOPUYKvsTOc= MC4CAQAwBQYDK2VwBCIEIIJtJBnTuKbIy5YjoNiH95ky3DcA3kRB0I2i7DkVM6Cf - eyJhbGciOiJFZERTQSJ9.eyJpZCI6MX0.RAxBAQPFOxrCfgqb56eaAz9u2lByj-WEO- JWgJH3Cyx1o1Hwjn1pA2M4NgJeob9vb2Oaw4FOeYFr6_33XMTnAQ
解码的令牌标头:
{
"alg": "EdDSA"
}用PyJWT验证Python中的令牌
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/ on 25519算法,因此无法在该站点上验证令牌。我也不知道其他JWT网站可以验证EdDSA签名的令牌。
https://stackoverflow.com/questions/66893790
复制相似问题