【发布时间】:2018-03-05 17:52:50
【问题描述】:
在我看来,JWT 的主要优势在于任何客户都可以阅读声明并验证您是生成声明的人。但是,如果您使用对称密钥来计算签名,那么客户端必须知道您的签名密钥才能验证 JWT,此时他们可以生成他们想要的任何声明。为什么有人会选择对称算法而不是非对称算法?
一位用户的answer 在另一个问题上说:
对称密钥只能以点对点的方式使用,因此接收者修改只有他和发送者拥有共享密钥的 JWT 是没有意义的
如果通信是点对点的,他们一定是在某个时候使用安全协议来交换密钥,那么在这种情况下,JWT 有什么用?
我之所以问这个问题是因为我看到的大多数在 ASP.Net 中实现基于 JWT 的安全性的示例都使用对称密钥。
【问题讨论】:
-
考虑用于登录和身份验证的 JWT 令牌。使用对称密钥颁发“签名”(加密)令牌的服务器的好处是它速度快(或比非对称更快)并且只需要在服务器端进行验证,以便服务器可以确认它本身,是生成该令牌的主机。如果生成服务器以外的各方需要验证令牌,您已经正确地确定了对称密钥是愚蠢的。
-
所以没有规定令牌总是必须由客户端验证? (我可能只是假设这是一件事)
-
不!服务器只使用 HMAC 是很常见的,他们稍后可以验证该 HMAC 以确定是否是他们发布了 JWT。简单但有效,无需访问数据库即可验证。
-
@LukePark 你想把它写下来作为答案吗?
标签: encryption jwt