IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

JWT简单介绍

关联任务:

任务五

直播时间:

2018-10-28 15:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

JWT简单介绍     中品

辅导师兄 [真传弟子]JAVA-童志荣


【修真院Java小课堂】Validation参数校验

大家好,我是IT修真院北京分院第35期的学员赵君钊,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java(职业)任务二,深度思考中的知识点——Validation参数校验


1. 背景介绍

身份验证

服务端提供资源给客户端,但是某些资源是有条件的。所以服务端要能够识别请求者的身份,然后再判断所请求的资源是否可以给请求者。

token

token是一种身份验证的机制,初始时用户提交账号数据给服务端,服务端采用一定的策略生成一个字符串(token),token字符串中包含了少量的用户信息,并且有一定的期限。服务端会把token字符串传给客户端,客户端保存token字符串,并在接下来的请求中带上这个字符串。

一般情况下,建议放入token的数据是不敏感的数据,这样只要服务端使用私钥对数据生成签名,然后和数据拼接起来,作为token的一部分即可。 客户端的每一次请求,都必须携带token,拦截器会对敏感资源的访问进行拦截,然后解析token,解析不成功,表示token不匹配。解析成功之后,判断token是否已过期,如果是,拒绝服务。所有都验证成功的情况下,拦截器放行。     

2. 知识剖析

JWT 

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。它由三部分组成,头部、载荷与签名。

头部(Header) 

头部包含了两部分,token 类型和采用的加密算法 { "alg": "HS256", "typ": "JWT" } 它会使用 Base64 编码组成 JWT 结构的第一部分

载荷(Payload) 

这部分就是存放信息的地方,可以把用户 ID 等用于验证用户身份的信息放在这里,JWT 规范里面对这部分有进行了比较详细的介绍,常用的由 iss(签发者),exp(过期时间),sub(面向的用户),aud(接收方),iat(签发时间),这五个字段都是由JWT的标准所定义的。

签名(Signature) 

前面两部分都是使用 Base64 进行编码的,即前端可以解开知道里面的信息。Signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥,然后使用 header 中指定的签名算法进行签名。签名的作用是保证 JWT 没有被篡改过。

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

JJWT

jjwt 是 java 对 JWT 的封装,它有两个重要的方法,bulider和parser分别用来创建和解析JWT

DefaultJwtBulider是JwtBuilder接口的实现类,用来创建jwt这个实现类中的方法用来设置JWT中的一些字段

DefaultJwtParser类用来解析jwt字符,传入签名密钥和要解析jwt字符串,jwt在解析的时候会自动校验jwt的有效性,根据情况会抛出三个异常,到期时间异常、jwt格式异常、签名异常,可以通过捕获这几个异常来进行更具体的校验

7.参考文献

参考资料:http://blog.leapoahead.com/2015/09/06/understanding-jwt/

————JSON Web Token - 在Web应用间安全地传递信息

8.更多讨论


暴露信息的问题?

在JWT中,不应该在载荷里面加入任何敏感的数据。一般需要传入用户的User ID。这个值实际上不是什么敏感内容,一般情况下被知道也是安全的。 但是像密码这样的内容就不能被放在JWT中了。如果将用户的密码放在了JWT中,那么通过Base64解码就能很快地知道你的密码了。


伪造JWT冒充身份进行登录?

服务端在生成token时,使用了客户端的UA作为干扰码对数据加密,客户端进行请求时,会同时传入token、UA,服务端使用UA对token解密,从而验证用户的身份。如果只是把token拷贝到另一个客户端使用,不同的UA会导致在服务端解析token失败,从而实现了一定程度的防冒充。但是攻击者如果猜到服务端使用UA作为加密钥,他可以修改自己的UA。


JWT缺点?

麻烦,而且所有的数据都被放到 JWT 里,数据大小很快就会超过 Cookie 的容量限制。

JWT 不支持撤销。不管发生什么,JWT 会持续有效,直到过期时间,无法完全掌控其有效期。

JWT 一旦被生成,就不会再和服务端有任何瓜葛。一旦服务端中的相关数据更新,无状态 JWT 中存储的数据由于得不到更新,就变成了过期的数据。

9.鸣谢

感谢观看,如有出错,恳请指正

10.结束语

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

评论

[修真长老]JAVA-错遇 发表于 2018-10-31 23:19:05 #1

JWT没什么意义。

回复

请您登录 后进行评论