如何使用JWT

国际惯例, 先介绍一下JWT:

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。


通俗来讲,JWT是一个含签名并携带用户相关信息的加密串,页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改。校验通过则认为是可靠的请求,将正常返回数据。


首先,先介绍一下JWT的原理:JWT由三部分组成,分别是头信息(Header)、有效载荷(Payload)、签名(Signature),中间以(.)分隔,如下格式:xxx.yyy.zzz, 三者都是以 Base64URL算法编码为字符串。

Header,由两部分组成,令牌类型(即:JWT)、散列算法(HMAC、RSASSA、RSASSA-PSS等)

JWT的第二部分是Payload,由 Registered Claim 以及需要通信的数据组成。这些数据字段也叫 Claim,重要的是 "exp" Claim 表示过期时间。这里通常是保存用户信息或者其他必要的非私密信息

要创建签名部分,必须采用编码的Header,编码的Payload,秘钥,Header中指定的算法,并对其进行签名,进行签名可以有效防止内容篡改。


一般来说, 常用系统都是用的session记录用户的登录状态,和JWT最大的区别就是session是保存在服务端的,但是JWT是保存在客户端的。

使用session的一般姿势是客户端请求服务端, 鉴权通过将用户信息保存在session中,只返回sesssion_id,客户端保存session_id为cookies,每次请求带着cookies,session由服务端维护。

而使用token的一般姿势是客户端请求服务端,鉴权通过后服务端颁发凭证即JWT给客户端,有客户端自己维护JWT,JWT有一定的时效性,超过时效则JWT失效。

使用JWT最方便之处就是JWT不在服务端存储任何状态, JWT非常适合水平拓展业务,一级其他 流行,安全,稳定,易用等等特性,同时, JWT也带来各种问题,例如:并不对数据进行加密,而是对数据进行签名,保证不被篡改;每次验证都需要计算;是一次性的;还有续签问题也是一大难题。


所以,我们在使用JWT的时候就要分清场景,以下场景就比较适合,否则就老老实实用session的方案:

如果你的api是服务端对服务端的

如果你要构建类似单点登录的系统

如果你的应用非常简单


网友评论

3条评论

发表

网友评论

3条评论

发表

最新评论

01月01日 17:29

12月31日 23:32

12月31日 23:05

推荐文章

彩龙

Copyright © 2008-2019 彩龙社区(http://www.clzg.cn) 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP