Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于JWT验证,客户端和服务器之间需要多少通信?_Javascript_Node.js_Jwt - Fatal编程技术网

Javascript 对于JWT验证,客户端和服务器之间需要多少通信?

Javascript 对于JWT验证,客户端和服务器之间需要多少通信?,javascript,node.js,jwt,Javascript,Node.js,Jwt,我真的对JWT验证的细节感到困惑。我知道这必须在服务器上完成,但JWT也会在服务器上生成/签名 这意味着(对粗体部分感到困惑): 用户请求登录(用户/密码被发送到服务器) 服务器检查用户是否存在和密码是否正确,并返回签名的JWT 客户端收到JWT后,将其发送回服务器进行验证? 服务器验证JWT,然后返回OK响应? 如果生成和签署JWT的是服务器,那么为什么需要验证呢?这对我来说唯一有意义的方法就是你在前端进行验证,我知道这是一个很大的禁忌 我显然不清楚这件事。有人能帮我填空吗?让我们假设您在

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

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

  • 用户请求登录(用户/密码被发送到服务器)
  • 服务器检查用户是否存在和密码是否正确,并返回签名的JWT
  • 客户端收到JWT后,将其发送回服务器进行验证?
  • 服务器验证JWT,然后返回OK响应?
如果生成和签署JWT的是服务器,那么为什么需要验证呢?这对我来说唯一有意义的方法就是你在前端进行验证,我知道这是一个很大的禁忌


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

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

  • 您的客户将发送
    [POST]登录请求。api将验证凭证并生成JWT令牌。客户端应该存储收到的JWT令牌
  • 当客户端想要发送
    [GET]订单
    请求时,它应该将JWT令牌放入请求中,否则它将获得401个未授权
  • 然后服务器验证给定的JWT令牌是否有效。不仅可以验证JWT令牌本身,还可以验证多个数据(具有多个可选声明,以便您可以使用它们,或者您可以将自定义数据放入验证中,例如:特权)

  • 当您有多个RESTfulAPI端点时,JWT非常有用。您不需要管理会话(当然可以),而且由于它可以存储大量数据,您可以轻松获取客户端信息,而无需从db或其他任何地方检索信息。

    如果您想了解发生了什么,大多数浏览器中都有一个网络检查器。不过,我假设这些步骤正确吗?看起来我想得太多了,感觉不对这取决于你有什么流量策略,但通常至少有03个步骤。检查一下,这很好,谢谢。作为跟进,对于一些“空闲”的东西,比如仅仅让用户保持登录,是否需要检查间隔(比如每分钟左右),以检查用户是否仍在登录,或者是否使用了与您描述的相同的模式?当您使用JWT时,您不需要主动检查。当请求到来时,验证器(或API)将验证令牌。有许多方法可以设置和管理JWT令牌的过期,其中一种可能的方法是使用“exp(过期时间)”声明(请参阅rfc7519)。在生成JWT令牌时设置声明,并在收到请求时进行验证。然后只需设置足够时间的exp(例如:+1个月)。这样,您将需要实现刷新逻辑。您可以生成永久性令牌(这很危险),而且可以肯定,一切都取决于您的服务的特性。