自包含的含义:jwt可以让用户自定义JWT里面包含的用户信息,如:姓名、昵称等(不要放隐密的信息)。从而避免了多次查询数据库。
JWT数据结构
JWT由三个部分组成
1、Header
2、Payload
3、Signature
三者组合在一起
Header.Payload.Signature
案例
看上去是不是满乱,我们来依次看下里面的结构。
Header
这个是JWT第一段数据,表示头部信息,主要的作用是描述JWT的元数据,上面的案例就是:
{
alg: “HS256”,
typ: “JWT”
}
1、alg属性表示签名的算法,默认算法为HS256,可以自行别的算法。
2、typ属性表示这个令牌的类型,JWT令牌就为JWT。
上面的JSON数据会通过Base64算法进行编码而成,看工具图
Payload
此为JWT第二段数据,用来存放实际需要传递的数据。JWT官方也规定了7个字段供选用
当然除了官方字段,我们可以自定义字段,以上面的案例,我们看下实际的数据
注意:这段也是用Base64算法,JWT默认是不加密的,任何人都可以获取,只要进行Base64解码就行了,所以不要把隐密的信息放到JWT中
Signature
此为JWT第三段数据,主要作用是对前面两段的数据进行签名,防止数据篡改。一般我们进行签名的时候会有个密钥(secret),只有服务器知道,然后利用Header中的签名算法进行签名,公式如下:
HMACSHA256(
base64UrlEncode(header) + “.” + base64UrlEncode(payload),
secret)
算出签名后,把Header、Payload、Signature三个部分拼成一个字符串,之间用(.)分隔,这样就可以把组合而成的字符串返回给用户了。
JWT的工作方式
在用户进行认证登录时,登录成功后服务器会返回一个JWT给客户端;那这个JWT就是用户的凭证,以后到哪里去都要带上这个凭证token。尤其访问受保护的资源的时候,通常把JWT放在Authorization header中。要用 Bearer schema,如header请求头中:
Authorization: Bearer
基于JWT的身份认证
上面的JWT的工作方式,其实就是一个完整的身份认证流程,我们这里把这个讲的在通俗一点。
1、用户提供用户名和密码登录
2、服务器校验用户是否正确,如正确,就返回token给客户端,此token可以包含用户信息
3、客户端存储token,可以保存在cookie或者local storage
4、客户端以后请求时,都要带上这个token,一般放在请求头中
5、服务器判断是否存在token,并且解码后就可以知道是哪个用户
6、服务器这样就可以返回该用户的相关信息了
这个流程小伙伴们有没有发现,用户信息是放在JWT中的,是存放在客户端(cookie,local storage)中的,服务器只需解码验证就行了,就可以知道获取到用户信息。而我们之前的Session方式就不一样。
与Session-Cookie方式的区别
Session-Cookie方式的这里就不多作介绍了,之前文章已经介绍了。直接上图说明区别
上图是Sesson服务器方式,我们发现Session用户信息是在服务器端存储的。
我们再来看看JWT方式
上面的token即用户信息是存储在客户端的,服务器端只要解码即可。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!**