Restful讲究一个无状态的特性(stateless),这就不能把一些例如登陆后的认证信息写进cookie的传统方式,

目前探索的是采用token的方式来进行权限的识别。

刚开始研究token的时候,很容易查到比较流行的JWT(JSON Web Token)的很多资料,目前有RFC的规范(尽管还只是个草案)。

简单来说JWT规定了可以自定义的CLAIM区域,并且可以加密(要在头部指明加密方法),如下图所示

(本图来自于https://jwt.io)

由于采用的非对称加密的方式,所以一般情况下信息还是比较安全的(有人对于header里边标明了加密算法而有些担忧,提出改进的是只是标明自定义算法type例如"alg:1")。

JWT的优势显而易见,这样认证过的一些信息就可以放入其中,并且下次用户再次访问的时候,只需要将JWT返回就好,服务器根据解密JWT的内容来获取一些认证信息,并且可以在JWT里设定过期的时间,用于识别登陆时效性。

但是如果用于用户登陆认证方面,就必须满足用户主动logout的情况,但是由于这些认证后的信息都保存在JWT里,所以有一种建议是将JWT里边的过期时间设置的较短,每次成功访问后刷新过期时间,一旦过期也就理解为logout了。这种做法,并不满足logout的

动作,所以更常用的一种做法就是将JWT生成后保存在数据库中例如保存在redis中,并由redis设定过期时间。

分析到此,发现JWT还是要保存在数据库中,而且其认证后的信息某种意义上来说虽然加密了,但是还是暴露在public当中,这一点让我总感觉不舒服。

于是,一个新的方案产生了,既然逃不出要利用数据库,那么就将认证后的信息保存在数据库中(例如redis),返回给用户的token就是为了识别唯一性,当用户成功认证后将获得一个token,这个token并不包含任何信息,只是为了用户下次再次访问的时候,后台能够在数据库中查询到相关信息。

(之所以用redis,考虑到其读取K-V的速度和命中率都很不错)

最新文章

  1. <td></td>标签的border 样式在浏览器中显示不出来
  2. TextBlock
  3. Lambda GroupBy Sum
  4. 架构系列:ASP.NET 项目结构搭建
  5. android 多布局
  6. 项目解析- JspLibrary - part1
  7. Microsoft Visual Studio 2013 Update 2 离线安装程序
  8. sqlserver中的聚合函数
  9. IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
  10. 再造 “手机QQ” 侧滑菜单(三)——视图联动
  11. Javascript做模糊查询
  12. angular 学习笔记
  13. linux系统优化配置
  14. 本地系统服务例程:Nt和Zw系列函数
  15. P4081 [USACO17DEC]Standing Out from the Herd
  16. kubernetes1.13之后的kubeadm init config
  17. JDBC Statement对象执行批量处理实例
  18. 通过RF数据库查询中文字段结果正常显示的转换方法
  19. Python基础学习----拆包
  20. jquery 验证

热门文章

  1. 穿透dom触发事件
  2. scrapy 入门爬取新闻
  3. lr_java user协议脚本开发
  4. 本地代码上传到git
  5. Java垃圾回收算法和内存分配策略
  6. MSRHook与SSDTHook
  7. Oracle 11g 单实例到单实例OGG同步实施文档-EXPDP初始化
  8. tensorflow:保存与读取网络结构,参数
  9. case when 和 decode 的比较分析
  10. 怎么单独为ionic2应用的某一组件设置两个平台一致的样式