`
zhang_xzhi_xjtu
  • 浏览: 536658 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于代理的SSO设计

阅读更多
1 概念
SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的一种机制。


2 开源的josso,cas.

开源的josso,cas的设计实现是差不多的。都是一个认证中心加数个sso代理的方式。
主要看了josso,由于有一些限制,最后没有采用。
如java web的认证方式有限制,用户统一管理。


必须承认,安全问题是复杂的,sso作为一个跨多个系统的安全方案,也不会简单到哪里去.

用户,角色,认证,授权,sso,这些个东西在一起本身没有一个通用的模型,所以只能具体问题具体分析,
借鉴一些开源的思想,做一些可以满足当前需求的简单sso。


3 设计SSO中需要注意的东西

3.1 sso是否要解决授权问题?
一般sso的出现是当要集成多个老系统,或者集成老系统和新系统,一般来说,各个系统的授权是不一样的,很难用统一的方式来管理。
所以,sso一般都是只关心用户认证这一块.

3.2 多个系统是使用同一套用户schema,还是保留各自的用户schema。
同一套用户schema的好处是比较方便管理,但是前提条件是多个系统的用户schema基本相同,而且基于这个schema以前的授权系统还可以用.
保留各自的用户schema,则各个系统的独立性更强,各个系统的授权系统基本不需要改动.不足之处是认证中心需要维护一个user mapping.

3.3 是否跨域
是否跨域会影响sso的实现.主要是一些技术上的选择.比如cookie的使用与否.

3.4 是否有强侵入性
一般的sso产品都会说自己基本没有侵入性,这个是建立在很多假设上的.
一般的security是一个系统的一个横向切面的一个关注点问题,即使为了sso,在sso agent和原系统的security上面改动一些代码也是可以接受的.

3.5 sso agent如何获得已认证用户信息
可以选择多种技术手段来得到已认证用户信息,如编码过的用户信息放入cookie,通过session id在做一次查询,证书等等.

3.6 是否保留原系统的security.

3.7 一个系统登录是否代表所有系统登录
视需求而定,若A,B,C系统已经实现了SSO,则是否认为一个用户登入A系统的同时也登入了B,C系统.

3.8 数据传输的选择
可以用url para,xml rpc, ws等等.


4 基于代理的sso的工作过程

一台认证服务器(假定为CAServer),有两个应用A、B,分别部署在不同的服务器上, A,B上部署有SSO Agent.

1> 用户访问A,A应用无法找到用户的身份信息,使用redirect方法将用户引导至http://CAServer/login?backurl=http://A/path
   其中backurl是完成认证返回的url.

2> CAServer 显示登录界面,用户输入登录信息,CAS server进行认证。

根据sso设计实现的具体情况作必要的操作,
如实际登入各个子系统并把各个系统的session id放在cookie里(实际的登入调用各个子系统完成).
如果保留各自用户的schema,则进行user mapping得到A的用户.
生成可以标示该CA session的session id.
生成统一用户的加密信息.

返回http://A/path的同时返回可以标示该登录成功的信息.(Cookie,http para,token,cert,session id).

3> A上的SSO agent可以通过这个信息得到该用户(解密,请求CA Server,解析para,cert,load自己的session id).

SSO agent的部分运行完成,转入A的授权部分或者实际业务.

4> 用户访问B。
有两种情况.
一种是从CA login的信息中可以直接解析出用户,另一种则需要和CA server交互,redirect至http://CAServer/login?backurl=http://B/path
注意这里和1>中的跳转是有区别的,1>中的跳转除了backurl没有其他信息传递给CA server, 而此时的redirect则会传递标示登录成功的信息给
CA server,通过cookie,或者http para.

5> CA server接受B的redirect
同时,根据sso的具体情况可以做如下操作.

验证该token,cert是否有效.
进行user mapping,得到B的用户.
实际登入B.

返回http://B/path的同时返回可以标示该登录成功的信息.(Cookie,http para,token,cert,session id).

6> B上的SSO agent可以通过这个信息得到该用户(解密,请求CA Server,解析para,cert,load自己的session id).

SSO agent的部分运行完成,转入B的授权部分或者实际业务.
分享到:
评论
5 楼 zhang_xzhi_xjtu 2009-12-29  
en,概念是相似的。
我这个简单是指Identity Provider只有一个。很多环节可以根据需求做适当的剪裁。
而SAML2作复杂的话,可以各个系统有自己的security token serivce server,颁发自己的security token,然后做跨安全域再认证,这样就比较复杂了。当然,也可以只有一个security token serivce server,向各个系统统一颁发。
4 楼 Garriot 2009-12-28  
我们现在用的SSO就是这样的,而且用的就是SAML2.没感觉比这个架构复杂多少。

SSO系统内一般都有Identity Provider概念(类似楼主的CAS)和Service Provider(A,B应用),不就是楼主的概念么
3 楼 zscomehuyue 2009-12-25  
%A1%A1%A1%A1%C3%C0%B9%FA%22%B8%D6%CC%FA%B4%F3%CD%F5%22%BF%A8%C4%DA%BB%F9%A3%AC1921%C4%EA%B8%B6%B3%F6100%CD%F2%C3%C0%D4%AA%B5%C4%B3%AC%B8%DF%C4%EA%D0%BD%C6%B8%C7%EB%CF%C4%B2%BC%A3%A8Schwab%A3%A9%B3%F6%C8%CECEO%A1%A3%D0%ED%B6%E0%BC%C7%D5%DF%B2%C9%B7%C3%BF%A8%C4%DA%BB%F9%CA
2 楼 zhang_xzhi_xjtu 2009-12-25  
以前用.net的wcf作A&A时用过,不过没有作sso。
用saml作sso应该也是可以的,但是同时,这个的架构就要复杂多了。我的这个简单的sso,把认证和user mapping集中了。
你用saml的话,认证和跨安全域的security token转换就比较分散了。
你们计划怎么做。
1 楼 zistrong 2009-12-25  
不知道您有没有听说过SAML2这个规范,这个是单点登录的一个规范。

我们现在做的单点登录系统就是应用SAML2规范封装用户信息的。

相关推荐

    sso_introduction.pdf

    它不仅涵盖了SSO的基本概念,还深入探讨了其架构设计、实施策略以及如何通过SSO提高系统的安全性和效率。 #### SSO简介 ##### Web系统中的认证挑战 随着互联网/内联网的广泛应用,Web系统已经从简单的网页展示...

    sso server端

    - 用户代理:即浏览器,用户通过它与SSO系统进行交互。 3. Java SSO实现: - Spring Security:一个强大的Java安全框架,支持SSO实现。它提供了CasServerConfigurerAdapter配置类,用于构建CAS服务器,并集成...

    CAS-SSO源码包(两个版本)

    CAS(Central Authentication Service)是基于Java的开源身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。SSO允许用户在一次登录后访问多个应用系统,而无需为每个系统分别进行认证,大大提升了用户...

    cas-server sso单点登录服务端

    "cas-server"是一个基于Java的开源SSO服务器,它提供了全面的身份验证和授权功能。CAS(Central Authentication Service)是这个服务器的核心,它设计用于集中管理、验证和共享网络应用程序的认证信息。CAS-server ...

    SSO项目介绍.docx

    3. Agent-based(基于代理人):在服务器上部署代理程序,作为不同应用间的认证桥梁,代理程序可以使用各种认证机制。 4. Token-based:使用令牌(如SecurID、WebID)进行身份验证,适用于多种应用环境。 5. 基于...

    CAS--SSO单点用到的jar包

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)框架。SSO允许用户在访问多个应用系统...通过理解这些库的作用,我们可以更好地设计和维护基于CAS的SSO系统。

    单点登录设计

    6. **重定向和代理服务器**:在SSO流程中,可能会使用重定向来将用户从SP引导至认证中心,或者设置代理服务器来处理跨域认证问题。 7. **安全考虑**:SSO涉及到敏感的用户信息,因此需要确保通信过程中的数据加密,...

    SSO分布式系统单点登陆入门到基础到原理实战

    SSO,即单点登录(Single Sign-On),是一种基于Web的应用程序认证处理方法。用户只需进行一次身份验证即可访问多个应用系统。这种机制极大地简化了用户的操作流程,提升了用户体验。在企业级应用环境中,SSO更是必不...

    CAS SSO 原理

    在CAS v2及以后的版本中,XML被用于增强协议的可扩展性,而CAS v3引入了AOP(面向切面编程)技术,使得基于Spring框架的应用更容易集成CAS。 CAS的工作流程大致如下: 1. 用户尝试访问受保护的Web应用。 2. CAS ...

    java学习-单点登录(SSO)

    OpenID Connect是基于OAuth2的SSO身份验证层,适用于Web和移动应用。在Java环境中,可以使用如Keycloak这样的开源身份管理系统,它支持OpenID Connect,并提供了丰富的API和工具来实现SSO。 6. **实现步骤** 实现...

    CAS 框架 SSO的实现.pdf

    ### CAS 框架 SSO 实现的关键知识点 ...通过以上对CAS框架SSO实现的详细介绍,我们可以看到CAS不仅提供了一套完整的单点登录解决方案,还非常注重安全性设计。这使得CAS成为企业级应用中实现SSO的首选方案之一。

    SSO Single_Sign-on__in_Action(cas)

    - **代理模式**:CAS引入了代理的概念,使得SSO更加灵活可靠。 - **XML 规范**:从CAS v2开始采用XML格式传输数据,增强了协议的可扩展性和易用性。 - **AOP 技术**:CAS v3引入了面向切面编程技术,方便Spring框架...

    基于LDAP协议的单点登录系统的研究与设计

    在设计基于LDAP协议的单点登录系统时,需要考虑以下技术知识点: 1. LDAP协议技术原理:LDAP协议使用TCP/IP协议进行通信,通常使用389端口(非加密通信)或636端口(使用SSL加密通信)。在协议层面上,LDAP使用目录...

    基于机器学习可解释代理模型的风电次同步振荡在线预测及优化控制方法.pdf

    为了解决这一问题,文章“基于机器学习可解释代理模型的风电次同步振荡在线预测及优化控制方法”提出了一种创新的方法,利用机器学习技术进行在线预测和优化控制,以抑制SSO。 首先,该方法采用Prony算法来分析电网...

    单点登录系统之结构、方法和实现.pdf

    此外,本文还深入探讨了两种常见的SSO实现方式:基于网关和基于代理的SSO系统。基于网关的SSO通过在所有应用系统前设置一个中央网关,来拦截和处理认证请求;而基于代理的SSO则是在每个应用系统内部署代理服务,由...

    cas代理模式代码示例

    CAS是一种基于Web的单点登录(SSO)解决方案,广泛用于网络应用程序的安全访问控制。 首先,我们需要理解代理模式的基本概念。代理模式提供了一种方式,使得客户端可以通过一个代理对象来间接访问目标对象。代理...

    基于大数据技术的传统服饰电商平台设计与实现.pdf

    本文着重介绍了一个基于大数据技术构建的传统服饰电商平台的设计与实现。 首先,该平台利用了SpringBoot、SpringCloud和Mybatis这一现代Java开发框架,以满足分布式电商平台对性能、稳定性和可扩展性的要求。...

    浙江政务服务网SSO接口规范方案.doc

    这是为简化上述复杂流程而设计的接口,可能包含更快速、更便捷的票据认证和获取第三方接入资源票据的方法,以优化开发者体验。 这个接口规范方案对保障浙江政务服务网的稳定运行,以及与其他系统集成具有重要意义...

Global site tag (gtag.js) - Google Analytics