【问题标题】:When would it be more useful to sign a JWT with a symmetric key than an asymmetric one?什么时候用对称密钥签署 JWT 比使用非对称密钥更有用?
【发布时间】:2018-03-05 17:52:50
【问题描述】:

在我看来,JWT 的主要优势在于任何客户都可以阅读声明并验证您是生成声明的人。但是,如果您使用对称密钥来计算签名,那么客户端必须知道您的签名密钥才能验证 JWT,此时他们可以生成他们想要的任何声明。为什么有人会选择对称算法而不是非对称算法?

一位用户的answer 在另一个问题上说:

对称密钥只能以点对点的方式使用,因此接收者修改只有他和发送者拥有共享密钥的 JWT 是没有意义的

如果通信是点对点的,他们一定是在某个时候使用安全协议来交换密钥,那么在这种情况下,JWT 有什么用?

我之所以问这个问题是因为我看到的大多数在 ASP.Net 中实现基于 JWT 的安全性的示例都使用对称密钥。

【问题讨论】:

  • 考虑用于登录和身份验证的 JWT 令牌。使用对称密钥颁发“签名”(加密)令牌的服务器的好处是它速度快(或比非对称更快)并且只需要在服务器端进行验证,以便服务器可以确认它本身,是生成该令牌的主机。如果生成服务器以外的各方需要验证令牌,您已经正确地确定了对称密钥是愚蠢的。
  • 所以没有规定令牌总是必须由客户端验证? (我可能只是假设这是一件事)
  • 不!服务器只使用 HMAC 是很常见的,他们稍后可以验证该 HMAC 以确定是否是他们发布了 JWT。简单但有效,无需访问数据库即可验证。
  • @LukePark 你想把它写下来作为答案吗?

标签: encryption jwt


【解决方案1】:

令牌并不总是必须由客户端验证。

例如,在一个基本的 Asp.Net 应用程序中,服务器既充当身份验证服务器,又充当授权服务器:

  • 服务器创建令牌并在用户登录时将其提供给用户
  • 用户在每次请求时将该令牌发送回服务器
  • 服务器验证token,授权用户

在此示例中,如果客户端通过单独的方式(例如 TLS/SSL)验证服务器的真实性,则客户端不需要验证服务器返回的令牌。在这种情况下,服务器使用对称加密算法是没有问题的。

【讨论】:

    猜你喜欢
    • 2015-12-30
    • 1970-01-01
    • 2010-10-30
    • 2011-01-14
    • 1970-01-01
    • 2023-04-09
    • 2014-10-14
    • 2017-05-17
    • 2013-02-12
    相关资源
    最近更新 更多