欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

检查签名是否正确;检查Token是否 昆山软件定制开发 过期;检查Token的接收方是否是自己(可选)

点击: 次  来源:宝鼎软件 时间:2017-06-20

原文出处: John Wu

上次在《JSON Web Token – 在Web应用间安详地通报信息》中我提到了JSON Web Token可以用来设计单点登录系统。我实验用八幅漫画先让各人领略如何设计正常的用户认证系统,然后再延伸到单点登录系统。

假如还没有阅读《JSON Web Token – 在Web应用间安详地通报信息》,我强烈发起你花十分钟阅读它,领略JWT的生成进程和道理。

用户认证八步走

所谓用户认证(Authentication),就是让用户登录,而且在接下来的一段时间内让用户会见网站时可以利用其账户,而不需要再次登录的机制。

小常识:可别把用户认证和用户授权(Authorization)搞混了。用户授权指的是划定并答允用户利用本身的权限,譬喻宣布帖子、打点站点等。

首先,处事器应用(下面简称“应用”)让用户通过Web表单将本身的用户名和暗码发送随处事器的接口。这一进程一般是一个HTTP POST请求。发起的方法是通过SSL加密的传输(https协议),从而制止敏感信息被嗅探。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

接下来,应用和数据库查对用户名和暗码。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

查对用户名和暗码乐成后,应用将用户的id(图中的user_id)作为JWT Payload的一个属性,将其与头部别离举办Base64编码拼接后签名,形成一个JWT。这里的JWT就是一个形同lll.zzz.xxx的字符串。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

应用将JWT字符串作为该请求Cookie的一部门返回给用户。留意,在这里必需利用HttpOnly属性来防备Cookie被JavaScript读取,从而制止跨站剧本进攻(XSS进攻)。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

在Cookie失效可能被删除前,用户每次会见应用,应用城市接管到含有jwt的Cookie。从而应用就可以将JWT从请求中提取出来。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

应用通过一系列任务查抄JWT的有效性。譬喻,查抄签名是否正确;查抄Token是否逾期;查抄Token的吸收方是否是本身(可选)。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

应用在确认JWT有效之后,JWT举办Base64解码(大概在上一步中已经完成),然后在Payload中读取用户的id值,也就是user_id属性。这里用户的id为1025。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

应用从数据库取到id为1025的用户的信息,图纸加密,软件开发,加载到内存中,举办ORM之类的一系列底层逻辑初始化。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

应用按照用户请求举办响应。

查抄签名是否正确;查抄Token是否 昆山软件定制开拓 逾期;查抄Token的吸收方是否是本身(可选)

和Session方法存储id的差别

Session方法存储用户id的最大弊病在于要占用大量处事器内存,对付较大型应用而言大概还要生存很多的状态。一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存储。

而JWT方法将用户状态分手到了客户端中,可以明明减轻处事端的内存压力。除了用户id之外,还可以存储其他的和用户相关的信息,譬喻该用户是否是打点员、用户地址的分桶(见[《你所应该知道的A/B测试基本》一文](/2015/08/27/introduction-to-ab-testing/)等。

虽说JWT方法让处事器有一些计较压力(譬喻加密、编码息争码),可是这些压力对比磁盘I/O而言或者是旗鼓相当。详细是否回收,劳务派遣管理系统,需要在差异场景下用数据措辞。

单点登录

Session方法来存储用户id,一开始用户的Session只会存储在一台处事器上。对付有多个子域名的站点,每个子域名至少会对应一台差异的处事器,譬喻:

  • www.taobao.com
  • nv.taobao.com
  • nz.taobao.com
  • login.taobao.com
  • 所以假如要实此刻login.taobao.com登录后,在其他的子域名下依然可以取到Session,这要求我们在多台处事器上同步Session。