博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSO:JWT安全认证的应用问题
阅读量:7082 次
发布时间:2019-06-28

本文共 1287 字,大约阅读时间需要 4 分钟。

  hot3.png

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准().该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。   

    基于JWT安全认证机制来实现SSO登录;在这个过程中对于SSO的基础实现我们采用一台单独的SSO服务器来进行登录验证,一旦有某一台服务器登录后SSO服务器自然会有验证记录,其他域名下的服务器只需要和SSO服务器校验便可以知道用户是否登录(通过跨域实现),整体机制是构建与cookie之上。

    JWT在SSO过程中起到了一种无状态传输的效果,我们只关心请求中所附加的token,通过token进行鉴权从而确认请求的合法性;这样的话整个实现不在立足于session,至于token的存储在前端是通过cookie或者localstorage实现我们并不关心。

    1.基于shiro机制实现的方案尤其要注意以下几点:

    1)多机器情况下,每台机器都用shiro控制,shiro的登录依赖自己的session,如果每台机器都产生自己的sessionid会导致同一域名下cookie存在大量的不同的sessionid;其次sessionid对于每次请求浏览器都会附加都请求cookie中,使得不同机器对sessionid的识别会出现模糊不清,导致登录不稳定!

    2)SSO登录的解决方案有几种,如:共享cookie,共享session;我们是基于共享用户信息的cookie,传递JWT的形式来解决SSO登录的问题,所以去掉对session的依赖,以及不同域名下的token保证不一致各自维护自己的token,并且cookie中token通过域名,path等等做好限制;

    3)SSO机制采用无状态原理(JWT原理) 

    这几点意味着每次请求在shiro中都需要进行shiro内部的登录(subject.login方法调用),实际测试来看shiro过滤器里面进行登录速度是非常快的,所以几乎不受什么影响。

 

    2.JWT登录实现要注意的问题:

    1)jwt的续签和注销 

    ~ 注销登录通过redis来解决

    ~ 统一通过redis设置的过期时间来管理用户登录的key,这个key一旦过期自动将用户重定向到登录页

    2) token的过期时间问题  

    JWT对于传统的方式需要管理session,cookie比较麻烦,同时安全性上做的不是很好提供了一些比较好的处理方案,具体的JWT实现我这里不做过多的论述,留几个地址作为参考即可:

    http://www.cnblogs.com/xiekeli/p/5607107.html 

    http://blog.csdn.net/a82793510/article/details/53509427 

  

转载于:https://my.oschina.net/wii01/blog/1488426

你可能感兴趣的文章
Oracle递归查询
查看>>
Web前端开发十日谈
查看>>
如何在cell内部操作控制器的一些行为
查看>>
第二个spring,第一天
查看>>
UVa 10795
查看>>
String和StringBuffer区别
查看>>
编程需要知道多少数学知识?
查看>>
虚拟空间,malloc
查看>>
PLL详解
查看>>
OSG闪存
查看>>
irssi忽略退出,加入消息
查看>>
从源码带你看懂functools的partial方法
查看>>
LeetCode:434. Number of Segments in a String
查看>>
Matplotlib 绘图与可视化 一些属性和错误
查看>>
c打印9*9乘法表
查看>>
[2017BUAA软工]提问回顾
查看>>
Python--day65--模板语言之filter
查看>>
centos下添加定时执行php脚本任务
查看>>
使用ADO.NET访问数据库
查看>>
Python 爬虫-抓取小说《盗墓笔记-怒海潜沙》
查看>>