首页 > 解决方案 > 客户端和服务器之间需要多少通信才能进行 JWT 验证?

问题描述

我真的对 JWT 验证的细节感到困惑。我知道它必须在服务器上完成,但 JWT 也是在服务器上生成/签名的。

所以这意味着(对粗体部分感到困惑):

如果服务器是生成和签署 JWT 的服务器,那为什么还需要验证呢?这对我来说有意义的唯一方法是如果您在前端进行验证,我知道这是一个很大的禁忌。

我显然不清楚这一点。有人能帮我填空吗?

标签: javascriptnode.jsjwt

解决方案


假设您在两个不同的服务器上有两个 api(或者您可以将其映像在无服务器平台上,这样就没有直接共享的资源) -[POST]login[GET]orders. [POST]login如果给定的凭证有效,您的API 将生成一个 JWT 令牌,[GET]orders并将仅返回授权客户的已下订单。那么步骤应该是

  1. 您的客户将发送[POST]login请求。该 API 将验证凭证并生成 JWT 令牌。客户端应存储接收到的 JWT 令牌。
  2. 当客户端要发送[GET]orders请求时,它应该将 JWT 令牌放入请求中,否则会得到 401 未授权。
  3. 然后服务器验证给定的 JWT 令牌是否有效。不仅可以验证 JWT 令牌本身,还可以验证多个数据(rfc7519有几个可选声明,以便您可以使用它们,或者您可以放置​​自定义数据来验证,例如:权限)。

当您有多个 RESTful API 端点时,JWT 非常有用。您不需要管理会话(当然可以),因为它可以存储大量数据,您可以轻松获取客户的信息,而无需从 db 或其他东西中检索它。


推荐阅读