【发布时间】:2017-10-28 02:30:48
【问题描述】:
我看到 JWT 可以用私钥对 JSON 对象进行签名,并通过公钥进行验证。
我认为可以使用 JWT 使用 JWT 对 API 请求有效负载进行签名。 但是,我不想使用私钥,而是使用公钥对 API 请求有效负载进行签名,并使用我的私钥在服务器端对其进行验证。这有没有可能?正如我所见,实现 JWT 的库似乎只用私钥签名并通过公钥验证。
难道不能用公钥签名吗?
谢谢
【问题讨论】:
-
用公钥签名没有意义,因为公钥应该对所有人都可用(它被称为公共)。如果有人可以签名,你想如何证明你从正确的人或机器那里得到了一些信息?也许您正在寻找 JSON Web Encryption (JWE)。你能描述一下你的使用场景吗?为什么您认为使用公钥签名对您有任何帮助?
-
“难道不能用公钥签名吗?” - RSA 背后的数学允许它,但这违反了 JWT 规范,所以不,你不会找到一个允许它的 JWT 库。
-
@ArtjomB。哦! ya...你指出了我没有想到的一点。实际上,我想添加一个额外的安全级别,以确保 API 仅从我的应用程序调用,而没有其他应用程序调用。因此,我正在考虑签署看起来可能适用于 JWT 的请求
-
不需要为此使用 JWT。只需将 API 密钥(一些对称令牌)添加到您的应用和 API。这很容易实现,并且具有与您设想的解决方案类似的安全保证(没有任何保证)。问题是用户总是可以对您的应用程序进行逆向工程并提取公钥或 API 密钥。您绝对应该做的是使用公钥固定(我假设您的 API 可以通过 HTTPS 访问)。
标签: cryptography jwt