Cryptography Json web令牌可以使用公钥签名吗?

Cryptography Json web令牌可以使用公钥签名吗?,cryptography,jwt,Cryptography,Jwt,我看到JWT可以使用私钥对JSON对象进行签名,并通过公钥进行验证 我认为使用JWT对API请求有效负载进行签名是可能的。 但是,我不想使用私钥,而是想使用公钥对API请求负载进行签名,并在服务器端使用私钥对其进行验证。可能吗?正如我看到的,JWT实现的库似乎只使用私钥签名,而使用公钥验证 用公钥签名不是不可能吗 谢谢你这个棘手的问题,但我会尽力的。JWT在RSA下面和里面使用RSA公钥和私钥是“可交换的”。一般来说,公钥和私钥的含义只取决于生成后如何处理它们 您通过未加密的渠道发送的且其他患者

我看到JWT可以使用私钥对JSON对象进行签名,并通过公钥进行验证

我认为使用JWT对API请求有效负载进行签名是可能的。 但是,我不想使用私钥,而是想使用公钥对API请求负载进行签名,并在服务器端使用私钥对其进行验证。可能吗?正如我看到的,JWT实现的库似乎只使用私钥签名,而使用公钥验证

用公钥签名不是不可能吗


谢谢你这个棘手的问题,但我会尽力的。JWT在RSA下面和里面使用RSA公钥和私钥是“可交换的”。一般来说,公钥和私钥的含义只取决于生成后如何处理它们

您通过未加密的渠道发送的且其他患者已知的信息称为“公钥”。 你藏起来却从不给任何人的密码称为“私钥”

因此,应该可以使用服务器的公钥加密某些东西(如JWT令牌过程中所做的),并将其发送到服务器。服务器需要相应的私钥来解密它

(请注意,“服务器公钥”的设计为可能的攻击者所知,通常每个攻击者都可以使用它来生成这些JWT令牌。我不知道您在这里的用例可以给您提供适当的建议。)

这里唯一的陷阱是JWT的实际实现(遗憾的是,我没有足够的知识)。JWT可以向其中一个“密钥”添加一些额外的数据,并将整个对象称为“公共”或“私钥”,从而破坏“可交换性”。。。唯一的方法是翻阅JWT的文档(希望找到一些东西)或源代码,或者只是尝试一下:/


如果您尝试过,请让社区知道:)

使用公钥签名没有意义,因为公钥应该对所有人都可用(称为公钥)。如果有人可以签名,你想如何证明你收到了来自正确的人或机器的信息?也许您正在寻找JSON Web加密(JWE)。你能描述一下你的使用场景吗?为什么您认为使用公钥签名对您有任何帮助?“难道不可能使用公钥签名吗?”-RSA背后的数学原理允许使用公钥签名,但这与JWT规范背道而驰,因此您找不到允许使用公钥签名的JWT库。@ArtjomB。哦哎。。。你指出了我没有想到的一点。实际上,我想添加一个额外的安全级别,以确保API仅从我的应用程序调用,而不从其他应用程序调用。因此,我正在考虑签署JWT可能不需要使用JWT的请求。只需在应用程序和API中添加一个API密钥(一些对称令牌)。这很容易实现,并且具有与您设想的解决方案类似的安全保证(没有任何保证)。问题是,用户总是可以对你的应用程序进行反向工程,并提取公钥或API密钥。您肯定应该做的是使用公钥固定(我假设您的API可以通过HTTPS访问)。