欢迎访问 夜阑小雨 我的学习碎片档案,这里记录了我的学习内容和工作中经验,希望给您带去帮助。

SSO单点登录原理和应用场景

PHP 夜阑小雨 997℃ 0评论

  一、什么是单点登录SSO(Single Sign-On)

    SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。
   
    二、单点登录解决了什么问题?
    
解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。
例如CSDN中的论坛应用,博客应用,下载应用模块。我们只要在CSDN中访问任何一个子应用后,再访问其他应用站点的时候就不需要在进行登录。
    
    三、应用场景流程
    
如果说我们没有登录直接去访问网站地址,这个时候在该站点下没有记录之前登录的Cookie,然后就发现用户没有登录,那么肯定是会被拦截的,然后回到登录页面,如果你登录进去后,Reids会在里面存一个key=SessionId,然后就跳进登录后的界面了,同时你拿着一个Token凭证,可以直接访问的其他网站,也可以直接通过地址进去访问。比如一些贷款中心,银行中心这种网站是不是就是这样的,你登录了都可以访问,在你的权限范围内,直接通过网址也可以进去,但是时间久了,如果你一段时间没去操作,就会失效,包括我们的银行APP,登录进去多久没操作,就又要重新登录了,那是我们的Redis缓存失效了。


    四、注意
    在实际的项目开发中会遇到各种情况,比如子站点和SSO主站点的接口调用参数约束,签名,加密等。以及纯html站点的实现SSO登录接口,或者纯.NET应用网站的跳转接口,这些都要区别开来。只有在详细了解SSO实现单点登录的原理之后进行开发才能做到事半功倍的效果。

    五、从单机到集群的演变

    下面小编从一个技术小白做订餐系统,一步一步演变框架。
    首先呢,小编做了一个java Web的项目,这个项目用户进入订餐界面,选择要定的饭后,提交的时候,会判断是否登录。如果没有登录,就会跳转到用户登录界面,然后进行登录的判断;如果已经登录了,就可以直接提交信息了。

     这个小系统非常的简单,操作也很流畅。但是它由一个适应范围:非高并发使用流畅。

      当我们的这个系统有了很高的并发,就像美团外面一样,每天的用户很多。我们能做的就是把我们的APP多发布到几个tomcat上,然后通过Nginx反向代理来均分权重。
    随之而来的就是Session共享问题了。
    用户1登录后,nginx给他分配到tomcat1上,session被存储在tomcat1上。当下次登录可能分配到tomcat2上,这样还需要重新登录。

  Session共享的问题:

    1、tomcat做集群配置session复制。如果集群中节点很多,会形成网络风暴。推荐节点数量不要超过5个。

    2、分布式架构。拆分成多个子系统。

      分布式架构

    独立建立一个单点登录系统,登录后,把用户信息存储到redis,把key值存储到cookie中,当其他系统需要用户信息的时候,就可以通过读取redis中的信息,如果redis中存在,就直接使用。如果不存在就跳转到单点登录系统进行登录。

转载请注明:夜阑小雨 » SSO单点登录原理和应用场景

喜欢 (4)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址