JWT的数据结构是什么

发布时间:2022-11-07 10:30:54 作者:iii
来源:亿速云 阅读:181

这篇文章主要介绍“JWT的数据结构是什么”,在日常操作中,相信很多人在JWT的数据结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JWT的数据结构是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

概述

JWT,全名为Json Web Token,是一种自包含令牌。

简单的说,就是基于JSON,在web环境下传输一个规定格式的字符串令牌。

广义上讲JWT,这是一个Web安全传输信息方式。狭义上来说,直接指传递的令牌字符串。

JWT的数据结构是什么

应用场景

首先,我们需要知道,JWT无法用于数据加密。一般是用来身份提供者和服务者之间传递被认证的用户身份信息,以便于从资源服务器获取到资源。

也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

所以,可以推断出,在以下场景中使用JWT是比较合适的。

JWT认证过程

JWT官网有一张图描述了JWT的认证流程

JWT的数据结构是什么

流程说明:

JWT的数据结构

JWT字符串的格式:

header.payload.signature

JWT通常由三部分组成,按照顺序: 头信息(header), 有效载荷(payload)和签名(signature)。

header

header是一串描述JWT元数据的JSON字符串,例如:

{"alg":"HS256","typ":"JWT"}

HS256 表示使用了 HMAC-SHA256 来生成签名。

最后使用Base64URL算法将上述JSON对象转换为字符串保存。

其他还有一些签名算法,可以去官网查看。

payload

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。

 iss (issuer):签发人
 exp (expiration time):过期时间(jwt的过期时间,这个过期时间必须要大于签发时间)
 sub (subject):主题
 aud (audience):受众
 nbf (Not Before):生效时间(定义在什么时间之前,该jwt都是不可用的.)
 iat (Issued At):签发时间
 jti (JWT ID):编号(jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。)

当然,除了前面的字符串,这里也就是我们传输数据的地方。可以自定义字段传输。例如:

 {
 "微信公众号": "程序编程之旅",
 "姓名": "谙忆"
 }

当然,我这里就是推广下公众号,前面的key用了中文名,你别这么玩就行。

注意哦,这部分的数据默认是不加密的。所以,如果有敏感信息,注意再使用加密算法把数据加密后传输即可。

这个JSON对象传输时,也要使用Base64URL算法转成字符串。

signature

签名哈希部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。

首先,需要指定一个密码(secret)。该密码保存在服务器中,并且不能向用户公开。然后,使用标头中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名。

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

token看起来像这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

JWT的用法

客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中。

此后,客户端将在与服务器交互中都会带JWT。如果将它存储在Cookie中,就可以自动发送,但是不会跨域,因此一般是将它放入HTTP请求的Header Authorization字段中。

当跨域时,也可以将JWT放置于POST请求的数据主体中。

JWT的优缺点

1、JWT默认不加密,所以可能导致数据泄露,但可以加密。生成原始令牌后,可以使用该令牌再次对其进行加密。

2、当JWT未加密时,一些私密数据无法通过JWT传输。

3、JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。

4、JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。

5、JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行身份验证。

6、为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输,防止服务器返回给用户的JWT被拦截。

看着上面6点,我的建议是,无论有没有敏感数据,对于用户认证信息数据做一层加密。最大程度上避免数据泄露造成问题。

最后,强调一点:JWT不是用来加密的,只是用来验证用户的真实性以及请求来源的真实性。

到此,关于“JWT的数据结构是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 数据结构是什么
  2. JWT是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jwt

上一篇:Android LayerDrawable怎么使用

下一篇:JavaScript数据类型检测功能如何实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》