这里是修真院后端小课堂,每篇分享文从前端
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】java
八个方面深度解析后端知识/技能,本篇分享的是:程序员
【Validation参数校验】算法
【修真院Java小课堂】Validation参数校验后端
你们好,我是IT修真院北京分院第35期的学员赵君钊,一枚正直纯洁善良的Java程序员,今天给你们分享一下,修真院官网Java(职业)任务二,深度思考中的知识点——Validation参数校验安全
身份验证服务器
服务端提供资源给客户端,可是某些资源是有条件的。因此服务端要可以识别请求者的身份,而后再判断所请求的资源是否能够给请求者。ide
tokenui
token是一种身份验证的机制,初始时用户提交帐号数据给服务端,服务端采用必定的策略生成一个字符串(token),token字符串中包含了少许的用户信息,而且有必定的期限。服务端会把token字符串传给客户端,客户端保存token字符串,并在接下来的请求中带上这个字符串。编码
通常状况下,建议放入token的数据是不敏感的数据,这样只要服务端使用私钥对数据生成签名,而后和数据拼接起来,做为token的一部分便可。 客户端的每一次请求,都必须携带token,拦截器会对敏感资源的访问进行拦截,而后解析token,解析不成功,表示token不匹配。解析成功以后,判断token是否已过时,若是是,拒绝服务。全部都验证成功的状况下,拦截器放行。
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/20...
————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.结束语
今天的分享就到这里啦,欢迎你们点赞、转发、留言、拍砖~