IT学习站-137zw.com

more +资源更新Forums

more +随机图赏Gallery

Zabbix 4.0 企业级自动化监控系统实战,完整版Zabbix 4.0 企业级自动化监控系统实战,完整版
Java程序员面试笔试真题与解析 完整pdf扫描版Java程序员面试笔试真题与解析 完整pdf扫描版
价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云
10节课让你成为滚床单高手  强烈推荐 屌丝的福音10节课让你成为滚床单高手 强烈推荐 屌丝的福音
Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载
最新流出的传智博学谷黑马python5.0课程最新流出的传智博学谷黑马python5.0课程

程序员过关斩将--更加优雅的Token认证方式JWT

程序员过关斩将--更加优雅的Token认证方式JWT

[复制链接]
刘冠华 | 显示全部楼层 发表于: 2019-11-14 11:40:03
刘冠华 发表于: 2019-11-14 11:40:03 | 显示全部楼层 |阅读模式
查看: 159|回复: 0

你还没有注册,无法下载本站所有资源,请立即注册!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550939362061&di=f69ccf0033b307badab7a07485107b63&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fpic%2F1%2F9d%2F4643d1d796.jpg[/img]
结果怎么样?
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3815731468,138754788&fm=26&gp=0.jpg[/img]
结果面试官问我还有没有更好的方式?
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550939362061&di=f69ccf0033b307badab7a07485107b63&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fpic%2F1%2F9d%2F4643d1d796.jpg[/img]
看来你又挂了
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3815731468,138754788&fm=26&gp=0.jpg[/img]
别说了,伤心呀。到底还有没有更好的方式呢?
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550939362061&di=f69ccf0033b307badab7a07485107b63&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fpic%2F1%2F9d%2F4643d1d796.jpg[/img]
你猜?
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
[img=100,auto]https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3815731468,138754788&fm=26&gp=0.jpg[/img]
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客


基于Token的认证
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
通过上一篇你大体已经了解session和cookie认证了,session认证需要服务端做大量的工作来保证session信息的一致性以及session的存储,所以现代的web应用在认证的解决方案上更倾向于客户端方向,cookie认证是基于客户端方式的,但是cookie缺点也很明显,到底有哪些缺点可以跳转上一次的文章。那有没有一种比较折中的方案呢?有的
把认证信息保存在客户端,关键点就是安全的验证,如果能解决认证信息的安全性问题,完全可以把认证信息保存在客户端,服务端完全无认证状态,这样的话服务端扩展起来要方便很多。关于信息的安全解决方案,现在普遍的做法就是签名机制,像微信公众接口的验证方式就基于签名机制。
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
当用户成功登陆系统并成功验证有效之后,服务器会利用某种机制产生一个token字符串,这个token中可以包含很多信息,例如来源IP,过期时间,用户信息等, 把这个字符串下发给客户端,客户端在之后的每次请求中都携带着这个token,携带方式其实很自由,无论是cookie方式还是其他方式都可以,但是必须和服务端协商一致才可以。当然这里我不推荐cookie。当服务端收到请求,取出token进行验证(可以验证来源ip,过期时间等信息),如果合法则允许进行操作。
基于token的验证方式也是现代互联网普通使用的认证方式,那它有什么优点吗?
1. 支持跨域访问,Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输.
2. 无状态:Token机制在服务端不需要存储session信息,因为Token自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
3. 解耦 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.
4. 适用性更广:只要是支持http协议的客户端,就可以使用token认证。
5. 服务端只需要验证token的安全,不必再去获取登录用户信息,因为用户的登录信息已经在token信息中。
6. 基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python,PHP)和多家公司的支持(如:Firebase,Google, Microsoft).


那基于token的认证方式有哪些缺点呢?
1. 网络传输的数据量增大:由于token中存储了大量的用户和安全相关的信息,所以比单纯的cookie信息要大很多,传输过程中需要消耗更多流量,占用更多带宽,
2. 和所有的客户端认证方式一样,如果想要在服务端控制token的注销有难度,而且也很难解决客户端的劫持问题。
3. 由于token信息在服务端增加了一次验证数据完整性的操作,所以比session的认证方式增加了cpu的开销。


但是整体来看,基于token的认证方式还是比session和cookie方式要有很大优势。在所知的token认证中,jwt是一种优秀的解决方案
jwt

程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
头部
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
header典型的由两部分组成:token的类型(“JWT”)和算法名称(比如:HMAC SHA256或者RSA等等)。
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
除了以上字段之外,你完全可以添加自己想要的任何字段,这里还是提醒一下,由于jwt的标准,信息是不加密的,所以一些敏感信息最好不要添加到json里面
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户。需要提醒一下:base64是一种编码方式,并非加密方式。
写在最后
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
基于token的认证方式,大体流程为:
1. 客户端携带用户的登录凭证(一般为用户名密码)提交请求
2. 服务端收到登录请求,验证凭证正确性,如果正确则按照协议规定生成token信息,经过签名并返回给客户端
3. 客户端收到token信息,可以保存在cookie或者其他地方,以后每次请求的时候都携带上token信息
4. 业务服务器收到请求,验证token的正确性,如果正确则进行下一步操作
程序员过关斩将--更加优雅的Token认证方式JWT  技术博客 o_33



程序员过关斩将--更加优雅的Token认证方式JWT  技术博客
这里再重复一次,无论是token认证,cookie认证,还是session认证,一旦别人拿到客户端的标识,还是可以伪造操作。所以采用任何一种认证方式的时候请考虑加入来源ip或者白名单,过期时间,另外有条件的情况下一定要使用https。

程序员过关斩将--更加优雅的Token认证方式JWT  技术博客 o_QQ%e6%88%aa%e5%9b%be20190112194545


来源:http://www.137zw.com
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
137zw.com IT学习站致力于免费提供精品的java技术教程和python技术教程,CCNA书籍/资料/CCNP书籍/资料教程/CCIE书籍/资料/H3C学习/认证/一级建造师考试/微软学习/认证/包括基础教程和高级实战教程,同时也提供分享网站源码下载和互联网相关一系列的技术教程,我们想做的就是让知识分享更有价值!(IT学习站官方唯一域名地址:www.137zw.com 请谨防假冒网站!)本站所有资源全部收集于互联网或网友自行分享,分享目的仅供大家学习与参考,如无意中侵犯您的合法权益,请联系本站管理员进行删除处理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

浙ICP备19022368号-1|Archiver|手机版|IT学习站-137zw.com

GMT+8, 2020-7-11 00:32 , Processed in 6.201377 second(s), 34 queries .

快速回复 返回顶部 返回列表