70.如何实现单点登录,如何实现权限控制,用户密码泄露后如何保证安全性:单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统。简而言之,多个系统,统一登陆。单点登录原理 sso需要一个独立的认证中心,所有子系统都通过认证中心的登录入口进行登录,登录时带上自己的地址,子系统只接受认证中心的授权,授权通过令牌(token)实现,sso认证中心验证用户的用户名密码正确,创建全局会话和token,token作为参数发送给各个子系统,子系统拿到token,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。 单点登录的实现方案,一般就包含:Cookies,Session同步,分布式Session,目前的大型网站都是采用分布式Session的方式。 1.基于Cookie+Redis的单点登录 最简单的单点登录实现方式,用cookie作为媒介存放用户凭证。 用户登录系统之后,会返回一个加密的cookie,当用户访问子应用的时候会带上这个cookie,授权以解密cookie并进行校验,校验通过后即可登录当前用户。 2.分布式session方式实现单点登录 流程运行: (1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session; (2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页; (3)建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息; (4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时; 结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。 3.使用token实现 1.在项目某个模块进行登录,登录之后,按照规则生成字符串,把登陆之后用户包含到生成字符串里面,把字符串返回(1)可以把字符串通过cookie返回(2)把字符串通过地址栏返回 2.再去访问项目其他模块,每次访问在地址栏带着生成的字符串,在访问模块里面获取地址字符串,根据字符串获取用户信息。如果可以获取到就能登录。
点赞 评论

相关推荐

12-09 00:19
清华大学 Java
Yilena:项目写的太差了,而且这两个项目也很杂,agent方面我不太了解,但对于后端来说这两个项目竞争力感觉不如烂大街项目。 我觉得首要之急是解决你到底是想搞toc/tob还是agent
不给转正的实习,你还去吗
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务