`

SSO(单点登录)实现机制讲解

    博客分类:
  • sso
sso 
阅读更多

http://blog.csdn.net/yan_dk/article/details/7095091
引言
         单点登录有许多开发商提供解决方案,本文以yale大学SSO开源项目CAS为例,介绍单点登录实现机制。
术语解释
SSO-Single Sign On,单点登录

TGT-Ticket Granting Ticket,用户身份认证凭证票据

ST-Service Ticket,服务许可凭证票据

TGC-Ticket Granting Cookie,存放用户身份认证凭证票据的cookie

SSO原理概述
SSO组件主要包含:SSO服务器、SSO客户端。SSO服务器主要负责完成用户认证、提供单点登录服务;SSO客户端部署在应用系统(Web应用端与C/S架构模式应用端),用户请求访问应用系统的受保护资源时,需要将请求转向SSO服务器进行身份认证、单点登录服务相关处理。

 

SSO服务器接口
uri 说明
/login
凭证请求器,参数如下:

service:客户端要访问的应用的标识;

renew:如果设置这个参数,sso将被绕过;不支持renew和gateway同时存在,若存在则忽略gateway;

gateway:如果设置这个参数,CAS将不再问客户端要凭证。 


凭证接收器,参数如下:

service:客户端要访问的应用的标识;CAS在认证成功后将它的url转发给客户端;

warn:在认证转发给其他服务前,客户端必须给予提示。

/logout 单点退出,释放cas单点登录的session
/proxyValidate SSO服务器验证票据的合法性
   
   
SSO单点登录主要原理
SSO单点登录访问流程主要有以下步骤:
1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

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

3. 用户认证:用户身份认证。

4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

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

7. 单点退出:用户退出单点登录。
SSO单点登录访问总共会涉及以上6个步骤,但用户不同的SSO访问可能只会涉及到几个步骤,我们把SSO访问流程我们分为5种实例情况介绍:登录点首次访问、登录点二次访问、单点首次访问、单点二次访问、单点退出。这5种实例应当可以比较全面地展示SSO访问实现的机制。

注:文中存在以下术语词汇,解释如下。

登录点:首次进入子系统登录的站点在本文中称为登录点。

单点:用户已经登录,而后再访问另一子系统的站点在本文中称为单点。

登录点首次访问:是指首次访问应用系统,进入登录页面的过程。登录点二次访问:是指在上述”登录点“,再次进行正常的访问”登录点“的过程。

单点首次访问:是指已经在上述“登录点”登录后,再首次访问另一个子系统进行访问的过程。单点二次访问:是指已经在上述“单点首次访问",再次进行正常的访问”单点“的过程。

 

登录点首次访问



说明:用户首次访问”登录点“System1,session中没有用户上下文,于是将请求地址包装为service参数,转向SSO服务器”定向认证“,SSO服务器返回登录页面,用户录入用户名、密码等凭证信息,提交给SSO服务器,SSO服务器进行认证,认证成功后,生成TGT,再根据TGT发放票据ST,返回响应给浏览器,浏览器带着票据ST的service参数的请求,请求SSO服务器验证票据,验证票据成功后,返回给浏览器用户信息(通过cas协议约定的xml格式传递数据解析转换成需要的用户信息),设置session用户上下文、cookie中设置TGC。
登录点二次访问


说明:用户在上述“登录点首次访问”登录成功后,再次访问登录点的应用服务时,判断session中已经存在用户上下文,就不再拦截,直接转向到需要访问的目标服务资源。

 

单点首次访问



说明:同上述“登录点首次访问”的说明。


单点二次访问

   与“登录点二次访问”相似。

单点退出

说明:用户单点登录后,有一个全局的过滤器SingleSignOutFilter对访问的安全资源的ticket,sessionid记录到一个映射表,我们暂称其为票据会话映射表。在一个子系统(如system1)执行单点退出"/logout"时,先销毁system1的本地session,再向SSO服务器发送单点退出请求,SSO服务器接到这个请求后,将用户认证票据TGT销毁,清除浏览器cookie中的TGC,再读取票据会话映射表,将其对应的票据ST,session全部销毁。这样用户再访问时各子系统时,是单点退出状态,就需要重新登录。

我们再详细从CAS源码中看看SSO单点退出实现机制。

SSO客户端涉及源码类图如下:


一般web应用中一般部署在web.xml文件中,单点退出相关配置如下:

<listener>
        <listener-class>            edu.yale.its.tp.cas.client.session.SingleSignOutHttpSessionListener
        </listener-class>
    </listener>
    <filter>
        <filter-name>SingleSignOutFilter</filter-name>
        <filter-class>
            edu.yale.its.tp.cas.client.session.SingleSignOutFilter
        </filter-class>
    </filter>
   
    <filter>
        <filter-name>CasLogoutProxy</filter-name>
        <filter-class>
            edu.yale.its.tp.cas.exclient.SimpleServerLogoutHandler
        </filter-class>
        <init-param>
            <param-name>logoutUrl</param-name>
            <!--CAS Server  Logout URL-->
            <param-value>
                http://localhost:8080/ssoserver/logout
            </param-value>
        </init-param>

        <init-param>
            <!--CAS Client Application URL-->
            <param-name>serviceUrl</param-name>
            <param-value>
                http://localhost:8070/ssoclient/index.jsp
            </param-value>
        </init-param>
       
    </filter>
...
    <filter-mapping>   
        <filter-name>CasLogoutProxy</filter-name>
            <url-pattern>/logout</url-pattern>
        </filter-mapping>   
    <filter-mapping>
        <filter-name>SingleSignOutFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 说明:我们看到单点退出的相关类结构,web.xml配置了单点退出的相关类(1个监听器SingleSignOutHttpSessionListener,2个过滤器SingleSignOutFilter,SimpleServerLogoutHandler)。实现利用了session存储机制,SessionStoreManager是个单例类,用于管理session的存储、删除;SessionMappingStorage是session的存储、删除的执行者,可以看到实际存储的结构是一个artifactId、sessionId为名值对的HashMap表;监听器SingleSignOutHttpSessionListener的作用是session销毁时,调用session管理单例类SessionStoreManager进行session的删除销毁;SingleSignOutFilter的作用有2个:一个是在单点访问拦截安全资源时调用单例类SessionStoreManager存储session,另一个是在单点退出时调用单例类SessionStoreManager删除session;SimpleServerLogoutHandler的作用是将客户端的退出请求转发到SSO服务器端,集中处理做各个子系统的单点退出。
      SSO服务器端单点退出涉及源码类图如下:

            
分享到:
评论

相关推荐

    SSO单点登录实现与实现原理

    总结来说,SSO单点登录是提高用户访问效率和系统安全性的重要工具。其核心在于通过中央认证服务实现用户身份的统一管理和验证,简化了用户的登录流程,同时也降低了潜在的安全风险。了解SSO的实现原理和源码分析,...

    SSO单点登陆解决方案

    SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...

    SSO单点登录源码

    在"SSO单点登录源码"这个主题中,我们主要关注的是如何实现这样一个系统。通过提供的链接(http://www.blogjava.net/xcp/archive/2010/04/13/318125.html),我们可以了解到SSO的基本原理和实现步骤。在这个样例中,...

    java sso单点登录案例、服务综合治理

    总的来说,SSO单点登录的实现涉及身份验证、票据管理和服务间的协作。在Java环境下,我们可以选择Spring Security、CAS或Keycloak等工具来构建SSO系统,并结合服务综合治理框架,如Spring Cloud或Netflix OSS,提高...

    Spring Security基于JWT实现SSO单点登录详解

    Spring Security 基于 JWT 实现 SSO 单点登录详解 基于 Spring Security 框架和 JWT(JSON Web Token)技术,可以实现 SSO(Single Sign-On)单点登录系统。SSO 是一种常见的身份验证机制,允许用户使用同一个...

    web-sso单点登录源码

    从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从...

    sso demo 单点登录

    单点登录(Single Sign-On,简称SSO)是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在这个"SSO demo 单点登录"示例中,我们看到使用了SSH(Spring、Struts2、...

    跨服务器登录验证(单点登录SSO)过程和Java实现

    单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入认证信息。这种机制极大地提高了用户体验,减少了用户记忆多套账号密码的困扰,...

    SSO单点登录技术

    描述中的“SSO单点登录技术-CAS统一身份认证服务视频”表明这是一个系列教程,通过视频形式详细讲解如何利用CAS来实现SSO。这个系列可能包括了对CAS的介绍、SSO的基本概念、开发环境的搭建、CAS服务器的配置以及实际...

    Java 单点登录开发教程(SSO)

    在《SSO单点登录Java开发教程(四)自己动手写SSO单点登录服务端和客户端.md》及《SSO单点登录Java开发教程(五)自己动手写SSO单点注销服务端和客户端.md》中,讲解了如何构建这些组件: 1. **服务端**:主要负责用户...

    单点登录SSO-图示与讲解

    单点登录(Single Sign-On,简称SSO)是一种身份认证机制,允许用户通过一次登录即可访问多个应用系统,而无需重复输入凭证。这种机制极大地提高了用户体验,同时也简化了安全管理。 #### 核心知识点解析 ##### 1....

    单点登录sso的原理与java实现详细讲解与示例(文档与源码)

    单点登录(Single Sign-On,简称SSO)是一种网络应用中的身份验证机制,它允许用户在一次登录后,就可以在多个相互独立的应用系统之间自由切换,而无需再次进行身份验证。这种技术极大地提升了用户体验,同时也简化...

    SSO(单点登录) 技术的实现

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。这一技术在现代企业信息化建设中扮演着重要角色,因为它提供了便捷的用户体验,同时...

    sso_bbs(v2)(使用cookie+filter实现单点登录的第二个版本)

    综上所述,sso_bbs(v2)项目是通过Cookie和Filter技术实现单点登录的一个实例,它涉及到用户认证、请求过滤、安全策略等多个方面,是理解SSO机制和Web应用程序安全设计的重要案例。通过分析和实践这个项目,开发者...

    跨域单点登录

    从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从...

    php的sso单点登录实现方法

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次进行身份验证。在PHP环境中实现SSO,通常涉及以下几个关键步骤,以下将详细讲解: 1. **点击登录...

    Iframe+Cookie实现简单的单点登录

    单点登录(Single Sign-On,SSO)是一种身份验证机制,允许用户在多个相互关联的应用系统中登录一次,然后在整个会话期间无需再次输入凭证即可访问这些系统。在本文中,我们将探讨如何利用Iframe和Cookie技术来实现...

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统或应用中登录后,无需再次认证即可访问其他关联系统或应用。CAS(Central Authentication Service)是 Yale 大学开发的一个开源项目...

    C#.net实现单点登录

    单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证机制,允许用户在一个系统或应用中登录后,无须再次输入凭证就能访问多个相互信任的系统或应用。在IT行业中,C#.NET框架提供了丰富的功能来实现跨域单点...

Global site tag (gtag.js) - Google Analytics