JWT从入门到精通(保姆教程)
JWT是什么呢?用户注册或登录后,我们希望记录用户的登录状态或为用户创建身份验证凭据。我们不再使用Session身份验证机制,而是使用Json Web Token身份验证机制。
什么是JWT?
JSON令牌(JWT)是基于JSON (RFC 7519)的开放标准,用于在网络应用环境之间传递声明。这种令牌设计得既紧凑又安全,特别适合分布式站点的单点登录场景。JWT的声明一般用于在身份提供者和服务提供者之间传递经过认证的用户身份信息,从而从资源服务器获取资源。它还可以添加其他业务逻辑所需的一些附加声明信息。令牌也可以直接用于身份验证或加密。
流程上是这样的:
1. 用户使用用户名密码来请求服务器;
2. 服务器进行验证用户的信息;
3. 服务器通过验证发送给用户一个token;
4. 客户端存储token,并在每次请求时附送上这个token值;
5. 服务端验证token值,并返回数据;
6. 这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了Access-Control-Allow-Origin: *。
JWT起源:
说到JWT,我们应该谈谈基于令牌的身份认证和传统会话身份认证之间的令牌差异。
传统会话认证:
我们知道,http协议本身是一个无状态协议,这意味着如果用户向我们的应用程序提供用户名和密码进行用户身份验证,那么下一次用户请求时,用户必须再次进行身份验证,因为根据http协议,我们无法知道是哪个用户发出的请求,所以为了让我们的应用程序识别是哪个用户发出的请求, 我们只能在服务器中存储一份用户登录信息的副本,这个登录信息会作为响应传递给浏览器,告诉它保存为cookie,以便下次发送给我们的应用程序,jwt中文网这样我们的应用程序就可以识别请求来自哪个用户,这就是传统的基于会话的身份验证。
但是,这种基于会话的身份验证很难扩展应用程序本身。随着不同客户端用户的增加,独立的服务器不再能够承载更多的用户,那么基于会话的认证应用的问题就会暴露出来。