Jwt Ed25519的alg值?
RFC7518有一个用于JWT的接口。但是,Jwt Ed25519的alg值?,jwt,jose,ed25519,Jwt,Jose,Ed25519,RFC7518有一个用于JWT的接口。但是,EdDSA没有值,例如Ed25519。在Jose中验证时,Ed25519也不被接受为有效值。Ed25519的正确alg值是多少?Ed25519是EdDSA()签名方案。另见和 根据alg需要设置为EdDSA: JWS算法:爱德华兹曲线DSA alg:EdDSA EdDSA也列在IANA注册中心的列表中(感谢@Florent Morselli的提示) 在这里,我展示了一个示例,如何使用和crypto在Node.js中生成ed25519密钥对和签名令牌,
EdDSA
没有值,例如Ed25519
。在Jose中验证时,Ed25519
也不被接受为有效值。Ed25519的正确alg值是多少?Ed25519是EdDSA()签名方案。另见和
根据alg
需要设置为EdDSA
:
JWS算法:爱德华兹曲线DSAalg:EdDSA
EdDSA
也列在IANA注册中心的列表中(感谢@Florent Morselli的提示)
在这里,我展示了一个示例,如何使用和crypto在Node.js中生成ed25519密钥对和签名令牌,然后使用Python中的公钥验证令牌: 生成密钥对和令牌:
const{SignJWT}=require('jose/jwt/sign')
const{generateKeyPairSync}=require('crypto')
const{publicKey,privateKey}=generateKeyPairSync('ed25519');
log(publicKey.export({格式:'pem',类型:'spki'}))
log(privateKey.export({格式:'pem',类型:'pkcs8'}))
const jwt=wait new SignJWT({'id':1})
.setProtectedHeader({alg:'EdDSA'})
.setExpirationTime('2h')
.标志(私钥)
console.log(jwt)
-----开始公钥------MCOWBQYDK2VWAYA7FYSB/9H7HVH8J1PAD5IOLFXJ4PRJFNLOWUPYKVSTOC=
-----结束公钥------
-----开始私钥------
MC4Caqawbqydk2vwbcieijtjbntukbiy5yjonih95ky3dca3krb0i2i7dkvm6cf
-----结束私钥------
EYJHBGCOIJFZERTQSJ9.eyJpZCI6MX0.RAxBAQPFOxrCfgqb56eaAz9u2lByj-WEO- JWgJH3Cyx1o1Hwjn1pA2M4NgJeob9vb2Oaw4FOeYFr6_33XMTnAQ 解码的令牌头:
{
"alg": "EdDSA"
}
使用以下命令验证Python中的令牌:
导入jwt
公钥=”----开始公钥-----
MCOWBQYDK2VWAYA7FYSB/9H7HVH8J1PAD5IOLFXJ4PRJFNLOWOPUYKVSTOC=
-----结束公钥------“”
令牌='EYJHBGCOIJFZERTQSJ9.eyJpZCI6MX0.RAXBAQPFOXRCFQB56EAAZ9U2LBYJ-WEO-JWGJH3CYX1O1HWJN1PA2M4NGJEOB9VB2OAW4FOEYFR633xMTNAQ'
decoded=jwt.decode(令牌、公钥、算法='EdDSA',verify=True)
打印(解码)
注意:目前不支持EdDSA/ED25519算法,因此您无法验证该站点上的令牌。我也不知道有任何其他JWT网站可以验证EdDSA签名令牌。除了有效答案外,相关规范为和,该算法名称在感谢@FlorentMorselli的评论和有用链接中列出。我在答案中添加了链接。