美文网首页
单点登录解决方案

单点登录解决方案

作者: superMessi | 来源:发表于2020-04-10 10:49 被阅读0次


    单点登录:

     

    即有多个系统共存的环境(如阿里巴巴 淘宝网 天猫 菜鸟驿站等)只需要登录一次即可,无需一一登录授权。

    原生:

    方案1.cookie + jsonp

    用Cookie做用户认证的载体,第一轻便(轻量级,方便)且可减轻服务器压力,但是不同端口的服务器cookie无法实现跨域,则需要借助jsonp携带cookie跨域实现。其次cookie存放客户端本地不安全,一旦被伪造或泄漏可被伪造登录。

    方案2.session + redis

    不同系统的session共用redis缓存,达到session共享即可实现单点登录。优点:认证安全,缺点也很明显,一旦用户量大且登入出频繁,则需要不断创建session资源占用服务器内存且频繁和缓存交互。

    框架:

    方案1:CAS(CentralAuthentication Server)

    (1)多台系统(client)登录验证需经过认证服务器(server)

    (2)实现原理:1cookie +多个session(其中已经登录的客户端产生session且 认证服务器产生全局的session)

    (3)流程:1.请求CAS客户端->有session则登录,没有则重定向到CAS应用服务器->CAS服务器返回浏览器ticket(加密过的cookie值及cookie对应的用户信息,且关闭会话即失效)并再次携带ticket请求CAS客户端->CAS服务器验证(有session则登录,没有则最终登录失败)

    优点:登录验证和认证高度安全,ticket随机生成且只能使用一次很能被伪造。已登录的用户在本CAS Client有session则无需和CASServer交互验证,操作简单。可以明显分担服务器压力。

    缺点:操作过程繁琐,需要不断地重定向,对于意外关闭刚登录的会话需要重新登录(源于ticket只能使用一次) 其次宏观上是消耗资源的,因为需要多台CAS客户端也存储session。

    登出操作繁琐,需要向多台CASClient销毁session,一旦CAS Client数量过多,登出执行时间稍长。

    (选用) 方案2:Spring Security + Oauth2.0协议+ JWT

    实现原理

    (1)spring Security是基于spring的安全框架,与spring其他产品如springboot,mvc等其他框架有较好的契合度,security提供较多的jsp标签库可以灵活展现视图,针对用户访问权限和身份有良好的控制,提供多种加密接口如Bcypt和MD5(可+salt)等。

    (2)Oauth2.0协议(Open Authorization)即开放授权协议。流行热门,移动端(也支持浏览器)第三方常用的授权协议,学习资源多它提供完整的授权模式,如授权码模式(避免Post xml信息,用方便URL重定向携带的code字符串),PWD模式,扩展模式(自定义)等。

    (3)JWT(JSON Web Token ):

            本质也是Token,三部分组成1.header 2.payload 3.signature

            Header可指定hash算法,payload可存放与服务端交互的字段,如userid等,最终签名的产生:sigature为urlEncode(header)_+urlEncode(payload)得到的数据再通过签名key(密钥)产生的字符串,即jwt字符串。

    优点:高度安全,操作简单,流程清晰,节约资源(无需应用端也创建session),且使用JWT代替token可防止token被拦截篡改。使用spring security Bcrpt密码加密算法(无需加盐,生产随机salt混搅在密码再加密,最终加密完的密码如123产生多样字符串) 可使加密过的数据库密码不被轻易分析且彩虹表破解,统一登录中心认证,对于已经发布的应用端更改为单点登录服务具备良好的模块移植,认证server添加应用id验证,无需大整改。

    缺点:JWT默认不加密只确保数据完整不被篡改,更适合于https协议请求。应用端的验证登录压力分散到认证服务器,对于多用户高并发需要频发与认证服务器交互,需要对认证服务器集中管理(如分布式,负载均衡,缓存等机制)

    相关文章

      网友评论

          本文标题:单点登录解决方案

          本文链接:https://www.haomeiwen.com/subject/bznpxctx.html