首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
dddddaz
门头沟学院 网络安全
发布于广东
关注
已关注
取消关注
@Java学习在路上:
虾皮二面:什么是 JWT? 如何基于 JWT 进行身份验证?
分享一下群友面试虾皮遇到的关于 JWT 的面试真题。相关面试题如下:什么是 JWT?为什么要用 JWT?JWT 由哪些部分组成?如何基于 JWT 进行身份验证?JWT 如何防止 Token 被篡改?如何加强 JWT 的安全性?如何让 Token 失效?......什么是 JWT?JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。Token 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,JWT 更符合设计 RESTful API 时的「Stateless(无状态)」原则 。并且, 使用 Token 认证可以有效避免 CSRF 攻击,因为 Token 一般是存在在 localStorage 中,使用 JWT 进行身份验证的过程中是不会涉及到 Cookie 的。我在 JWT 优缺点分析[1]这篇文章中有详细介绍到使用 JWT 做身份认证的优势和劣势。下面是 RFC 7519[2] 对 JWT 做的较为正式的定义。JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted. ——JSON Web Token (JWT)[3]JWT 由哪些部分组成?JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分:Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。Payload : 用来存放实际需要传递的数据Signature(签名) :服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。JWT 通常是这样的:xxxxx.yyyyy.zzzzz。示例:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c你可以在 jwt.io这个网站上对其 JWT 进行解码,解码之后得到的就是 Header、Payload、Signature 这三部分。Header 和 Payload 都是 JSON 格式的数据,Signature 由 Payload、Header 和 Secret(密钥)通过特定的计算公式和加密算法得到。HeaderHeader 通常由两部分组成:typ(Type):令牌类型,也就是 JWT。alg(Algorithm) :签名算法,比如 HS256。示例:{ "alg": "HS256", "typ": "JWT"}JSON 形式的 Header 被转换成 Base64 编码,成为 JWT 的第一部分。PayloadPayload 也是 JSON 格式数据,其中包含了 Claims(声明,包含 JWT 的相关信息)。Claims 分为三种类型:Registered Claims(注册声明) :预定义的一些声明,建议使用,但不是强制性的。Public Claims(公有声明) :JWT 签发方可以自定义的声明,但是为了避免冲突,应该在 IANA JSON Web Token Registry[5] 中定义它们。Private Claims(私有声明) :JWT 签发方因为项目需要而自定义的声明,更符合实际项目场景使用。下面是一些常见的注册声明:iss(issuer):JWT 签发方。iat(issued at time):JWT 签发时间。sub(subject):JWT 主题。aud(audience):JWT 接收方。exp(expiration time):JWT 的过期时间。nbf(not before time):JWT 生效时间,早于该定义的时间的 JWT 不能被接受处理。jti(JWT ID):JWT 唯一标识。示例:{ "uid": "ff1212f5-d8d1-4496-bf41-d2dda73de19a", "sub": "1234567890", "name": "John Doe", "exp": 15323232, "iat": 1516239022, "scope": ["admin", "user"]}Payload 部分默认是不加密的,一定不要将隐私信息存放在 Payload 当中!!!JSON 形式的 Payload 被转换成 Base64 编码,成为 JWT 的第二部分。SignatureSignature 部分是对前两部分的签名,作用是防止 Token(主要是 payload) 被篡改。这个签名的生成需要用到:Header + Payload。存放在服务端的密钥(一定不要泄露出去)。签名算法。签名的计算公式如下:HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,成为 JWT 的第三部分。如何基于 JWT 进行身份验证?在基于 Token 进行身份验证的的应用程序中,服务器通过 Payload、Header 和Secret(密钥)创建Token(令牌)并将 Token 发送给客户端。客户端接收到 Token 之后,会将其保存在 Cookie 或者 localStorage 里面,以后客户端发出的所有请求都会携带这个令牌。简化后的步骤如下:用户向服务器发送用户名、密码以及验证码用于登陆系统。如果用户用户名、密码以及验证码校验正确的话,服务端会返回已经签名的 Token。用户以后每次向后端发请求都在 Header 中带上这个 Token。服务端检查 Token 并从中获取用户相关信息。两点建议:建议将 Token 存放在 localStorage 中,放在 Cookie 中会有 CSRF 风险。请求服务端并携带 Token 的常见做法是将 Token 放在 HTTP Header 的 Authorization 字段中(Authorization: Bearer Token)。spring-security-jwt-guide[6] 就是一个基于 JWT 来做身份认证的简单案例,感兴趣的可以看看。JWT 如何防止 Token 被篡改?有了签名之后,即使 Token 被泄露或者解惑,黑客也没办法同时篡改 Signature 、Header 、Payload。这是为什么呢?因为服务端拿到 Token 之后,会解析出其中包含的 Header、Payload 以及 Signature 。服务端会根据 Header、Payload、密钥再次生成一个 Signature。拿新生成的 Signature 和 Token 中的 Signature 作对比,如果一样就说明 Header 和 Payload 没有被修改。不过,如果服务端的秘钥也被泄露的话,黑客就可以同时篡改 Signature 、Header 、Payload 了。黑客直接修改了 Header 和 Payload 之后,再重新生成一个 Signature 就可以了。密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。如何加强 JWT 的安全性?使用安全系数高的加密算法。使用成熟的开源库,没必要造轮子。Token 存放在 localStorage 中而不是 Cookie 中,避免 CSRF 风险。一定不要将隐私信息存放在 Payload 当中。密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。Payload 要加入 exp (JWT 的过期时间),永久有效的 JWT 不合理。并且,JWT 的过期时间不易过长。......
点赞 1
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-29 21:48
魔门塔(苏州)科技有限公司_感知算法工程师(准入职员工)
momenta内推momenta内推
momenta自动驾驶C++日常实习一面面经流程时间线:3.25HR联系约一面3.25晚7点一面3.26早上通知一面通过约二面3.26下午5点二面3.27早上HR沟通入职时间,已OC。一面流程:无手撕50min1.自我介绍2.面试官介绍部门职责(不涉及算法开发,是否能接受)3.简历浅挖(面试官大概率不是规控方向的,对项目可能了解不多,后续了解到是电气背景的)(1)hybird启发项如何设计(2)介绍latticeplanner流程(3)项目中涉及哪些传感器,如何获取heading angle。4.一系列C++,Linux,ROS八股(只列出部分还记得的)1.听说过rvo嘛2.知道raii嘛,原...
点赞
评论
收藏
分享
11-03 19:17
白日梦游戏_服务器主程
游戏突然的火爆与炸服:记一次服务器涅槃之旅
一、意料之外的火爆2022年1月19日,清晨8点多,项目组的成员们陆续抵达公司。这天是春节前的最后一个版本发布日,空气中弥漫着紧张与期待。这是一个与某知名IP联动的重大版本,也是我们游戏的首次IP合作尝试。版本内容几乎涵盖了玩家的所有期待:新角色、段位奖励调整、丰富的活动以及核心的IP联动内容……项目组为此已奋战数月。9点整,服务器团队准时执行停服维护,完成蓝绿部署切换。新版本代码正式上线,同时关闭服务访问,引导玩家更新客户端并等待开服。流程依照检查清单,一切井然有序。随后的40分钟,是停服期间测试团队进行最终功能验证的窗口。iOS审核环节出现的小小延迟带来了一些插曲,但所幸影响甚微。9点40...
秋招白月光
点赞
评论
收藏
分享
10-21 19:49
门头沟学院 自动化测试
秋招都要结束了 想要一个测试或者测开的offer 求捞捞😭😭
小浪_Coding:
实习编的自己笑了没
点赞
评论
收藏
分享
10-10 14:40
香港城市大学 Java
27届日常实习简历求拷打
准备跑路了,实习太水了,只能写一个黑客松的项目,但感觉也很玩具,文档也没得偷,这个简历现在投后端日常有机会吗
Ccyk_03:
补药来大陆虐我们啊
简历中的项目经历要怎么写
点赞
评论
收藏
分享
昨天 15:22
西北工业大学 Java
网易HR面面经
2025年11月04日 网易HR面全程10分钟。请你先做个自我介绍。实习中你主要负责哪些板块的内容,以及核心产出是怎样的?你实习所在的部门,它的主要职能和部门定位是什么?你的实习经历对你有什么收获或帮助?在这个过程中,你有没有发现一些问题?你有没有自己的解决思路?可以分享一下。目前你手上有没有其他公司的offer?或者有没有进入终面、谈薪等环节?你的意向公司是哪一家?你拿到的offer或意向中,薪资和工作地点分别是怎样的?在工作地点上,你自己有没有比较偏向的城市?你自己的期望薪资是多少?HR说要11月下旬才通知结果,怎么要这么久啊。许愿能过
查看10道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
java后端学习经验分享(大三进大厂版)
2.3W
2
...
26届0实习秋招总结
1.2W
3
...
美团实习四个月等三个月等到转正坏消息
1.1W
4
...
《以下言论仅代表个人观点,与百度无关》
7398
5
...
企鹅后端日常实习一面
6693
6
...
秋招丑闻爆料爆料
5882
7
...
摸爬滚打,我也一定要离开华为
4392
8
...
大家秋招压力很大一般怎么调节呀
4230
9
...
那个绩点倒数,挂科7门的女生最后考上了985研究生
3978
10
...
26届双非本拿下美团SSP的真实感受
3868
创作者周榜
更多
正在热议
更多
#
今年秋招是回暖还是遇冷
#
8096次浏览
51人参与
#
实习教会我的事
#
35430次浏览
309人参与
#
京东开奖
#
437516次浏览
2477人参与
#
你实习是赚钱了还是亏钱了?
#
10834次浏览
103人参与
#
用一句话形容你的团队氛围
#
6258次浏览
98人参与
#
我来点评面试官
#
3177次浏览
29人参与
#
秋招开始捡漏了吗
#
43312次浏览
304人参与
#
同bg的你秋招战况如何?
#
162278次浏览
941人参与
#
找工作八股要背到什么程度?
#
6679次浏览
113人参与
#
如果不考虑收入,你最想做什么工作?
#
35163次浏览
204人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
4477次浏览
49人参与
#
考研人,我有话说
#
149948次浏览
1198人参与
#
上班后,才发现大学__白学了
#
7408次浏览
45人参与
#
硬件人,你被哪些公司给挂了
#
68494次浏览
932人参与
#
58同城求职进展汇总
#
38432次浏览
260人参与
#
今年秋招还有金九银十吗
#
29129次浏览
262人参与
#
规定下班时间vs实际下班时间
#
57777次浏览
333人参与
#
打工人的精神状态
#
104671次浏览
1327人参与
#
机械人,你的第一份感谢信是谁给的
#
37733次浏览
346人参与
#
三一重工求职进展汇总
#
21139次浏览
82人参与
#
秋招后遗症
#
66985次浏览
422人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务