Javascript 对于JWT验证,客户端和服务器之间需要多少通信?
我真的对JWT验证的细节感到困惑。我知道这必须在服务器上完成,但JWT也会在服务器上生成/签名 这意味着(对粗体部分感到困惑):Javascript 对于JWT验证,客户端和服务器之间需要多少通信?,javascript,node.js,jwt,Javascript,Node.js,Jwt,我真的对JWT验证的细节感到困惑。我知道这必须在服务器上完成,但JWT也会在服务器上生成/签名 这意味着(对粗体部分感到困惑): 用户请求登录(用户/密码被发送到服务器) 服务器检查用户是否存在和密码是否正确,并返回签名的JWT 客户端收到JWT后,将其发送回服务器进行验证? 服务器验证JWT,然后返回OK响应? 如果生成和签署JWT的是服务器,那么为什么需要验证呢?这对我来说唯一有意义的方法就是你在前端进行验证,我知道这是一个很大的禁忌 我显然不清楚这件事。有人能帮我填空吗?让我们假设您在
- 用户请求登录(用户/密码被发送到服务器)
- 服务器检查用户是否存在和密码是否正确,并返回签名的JWT
- 客户端收到JWT后,将其发送回服务器进行验证?
- 服务器验证JWT,然后返回OK响应?
我显然不清楚这件事。有人能帮我填空吗?让我们假设您在两台不同的服务器上有两个API(或者您可以将其想象为在一个无服务器平台上,这样就没有直接共享的资源)
[POST]login
和[GET]orders
。如果给定的凭证有效,则您的[POST]登录
API将生成JWT令牌,[GET]orders
将仅为授权客户返回已下订单。那么步骤应该是
[POST]登录请求。api将验证凭证并生成JWT令牌。客户端应该存储收到的JWT令牌
[GET]订单
请求时,它应该将JWT令牌放入请求中,否则它将获得401个未授权当您有多个RESTfulAPI端点时,JWT非常有用。您不需要管理会话(当然可以),而且由于它可以存储大量数据,您可以轻松获取客户端信息,而无需从db或其他任何地方检索信息。如果您想了解发生了什么,大多数浏览器中都有一个网络检查器。不过,我假设这些步骤正确吗?看起来我想得太多了,感觉不对这取决于你有什么流量策略,但通常至少有03个步骤。检查一下,这很好,谢谢。作为跟进,对于一些“空闲”的东西,比如仅仅让用户保持登录,是否需要检查间隔(比如每分钟左右),以检查用户是否仍在登录,或者是否使用了与您描述的相同的模式?当您使用JWT时,您不需要主动检查。当请求到来时,验证器(或API)将验证令牌。有许多方法可以设置和管理JWT令牌的过期,其中一种可能的方法是使用“exp(过期时间)”声明(请参阅rfc7519)。在生成JWT令牌时设置声明,并在收到请求时进行验证。然后只需设置足够时间的exp(例如:+1个月)。这样,您将需要实现刷新逻辑。您可以生成永久性令牌(这很危险),而且可以肯定,一切都取决于您的服务的特性。