zoukankan      html  css  js  c++  java
  • 单点登录

    一、SSO,单点登录(single sign on),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录和单点注销。

    二、单点登录需求:多套系统能够识别同一用户身份,并实时同步用户信息以使各个系统进行相应的权限控制。一般单点登录实现一个系统登录,其他系统即可登录;一个系统注销,其他系统也会注销;一个系统登录信息过期,其他系统的登录信息也会过期。

    三、实际应用中,单点登录的最佳环境是

           用户在多套系统只有一个用户名和密码,即多套系统共享这一套用户名和密码,以及各应用系统采用的技术架构相同,域名后缀相同。

           单点登录的最坏的环境是

           用户在多套系统有各自的用户名和密码,每个系统都各自存储了各自的用户信息,且每套系统采用的技术架构不同,域名后缀也不同。

    四、SSO的两种架构与三种实现技术

          从应用架构层面,SSO主要可以分为集中验证模式和多点验证模式。

          集中验证模式:当应用系统需要登录时,统一交由验证服务器完成功能登录动作,应用系统不提供登录接入(登录界面)。

          相对于多点验证模式来说,集中验证模式的适用范围更广,而且在SSO服务器中使用的是统一的用户名密码,用户无需关注登录的是哪套系统的账号,所以用户体验更加优秀。由于所有的登录都放在了统一的服务器,所以当集中验证服务器宕机时,

    所有系统无法正常登录,或丢失SSO的功能,建议以独立服务器作为集中验证服务器,并需要保证登录服务器的稳定性。

          多点验证模式:应用系统供各自的登录界面,登录了一套系统后,另外其他系统无需再次登录即可通过身份验证。

          在多点验证模式的模式下,所有的登录操作都在应用系统完成,任何一套系统宕机不会对其它系统产生影响,也不会影响正常运行系统间的SSO。但若各套系统的账号不一样的时候,若要用户区分每套系统的用户密码,必定会降低用户的体验,

    为了解决该问题,多点登录模式最好有统一的用户密码验证的服务(如LDAP身份验证)。另外,多点登录模式相对集中验证模式来说会存在更多的技术限制。

          从SSO技术实现的角度,SSO的实现通常有一下三种技术实现途径:代理登录(agent)、令牌环(token),身份票据(ticket)。

          代理登录(agent):代理登录的原理就是在IE端通过表单提交的方式模拟应用系统的登录操作,实现SSO。

          代理登录的优点就是无需对原有系统做任何改造,适用于无法改造的旧系统;

          其缺点很明显:

        1、稳定性差,一旦登录期间某台服务器无法响应,则该服务器无法单点登录。

        2、安全性差,用户名密码通过明文传输。

        3、由于登录期间需要监控各个系统的响应,所以不建议大量使用,否则会影响登录的性能。

        4、由于IE的安全限制,代理登录必须在同域的情况下运行。

          令牌环(token:通过Cookie共享令牌环的方式传递当前用户信息,实现SSO。

          令牌环的方式最大好处在于无需统一的验证服务器,是“多点验证模式”的主力实现技术,各个服务器都通过统一的密钥对令牌进行加密解密,所以该方式具有安全性高、稳定性好、性能消耗低等优点;其缺点就是必须保证各台应用服务器同域

          身份票据(ticket:与令牌环不一样,身份票据是通过URL的方式传递,通过“两次握手”的方式,实现SSO。(如开源的CAS就是这种原理)

          身份票据的方式,是适用范围最广的一种SSO实现方式,可以解决跨域等问题,安全性高、稳定性好;其缺点就是必须增加一台验证服务器,保证在高压下验证服务器的稳定运行,性能方面由于每次登录都需要访问验证服务器,所以比令牌环的方式略差一点。

        

          三种技术实现途径的比较

         

    比较项

    代理登录

    令牌环

    身份票据

    需求实现程度

    无法实现同时切换用户与会话同时过期

    全部

    全部

    对原系统改造

    小量改造

    小量改造

    安全性

    稳定性

    偏低

    性能开销

    登录瞬间压力大一点

    非常小

    较小

    适用范围

    同域,对用户密码不一致的系统,需在登录服务器的用户凭证库保存用户密码映射

    同域,对不同登录名需增加对用户凭证库的访问

    所有可改造的系统,对不同登录名需在登录服务器的用户凭证库保存用户映射

    独立验证服务器

    需要

    不需要

    需要

    登录模式支持

    集中验证模式

    集中验证模式/多点验证模式

    集中验证模式

        本人小白,在对接过程中遇到单点登录问题,查找网上资料记录一下。

        token实现思路:

        1、用户登录校验,校验成功后就返回Token给客户端。

        2、客户端收到数据后保存在客户端。

        3、客户端每次访问API是携带Token到服务器端。

        4、服务器端采用filter过滤器校验,校验成功则返回请求数据,校验失败则返回错误码

        ticket实现思路:

        1、访问服务:sso客户端发送请求访问应用程序提供的服务资源。

        2、定向认证:sso客户端会重定向用户请求到sso服务器。

        3、用户认证:进行用户身份认证。

        4、发放票据:sso服务器会产生一个随机的ServiceTicket。

        5、验证票据:sso服务器验证票据ServiceTicket的合法性,验证通过后,允许客户端访问服务。

        6、传输用户信息:sso服务器验证票据通过后,传输用户认证结果信息给客户端。

        详细CAS实现单点登陆原理请参考 http://blog.csdn.net/javaloveiphone/article/details/52439613,我觉得讲的很详细。

       

  • 相关阅读:
    jQuery ajax解析xml文件demo
    Jquery ajax传递xml方式在ie8下兼容问题
    Ajax 跨域请求
    【leetcode刷题笔记】Maximal Rectangle
    【leetcode刷题笔记】Substring with Concatenation of All Words
    【leetcode刷题笔记】Largest Rectangle in Histogram
    【leetcode刷题笔记】Decode Ways
    【leetcode刷题笔记】3Sum Closest
    【leetcode刷题笔记】3Sum
    【leetcode刷题笔记】Divide Two Integers
  • 原文地址:https://www.cnblogs.com/zhao-gang/p/7684502.html
Copyright © 2011-2022 走看看