单点登陆

早上饭后坐在电脑前有点犯愁,不知道写点什么好。有些想法算法好,都是都还不成体系,凡是哪些不能清晰表达的,如果不能自己持续追问想清楚,写下来不仅对自己没什么帮助,对别人就更没啥价值。

即便可能随笔质量写的很差,但也应该努力用心写,而不是就那几分钟应付一下,否则就是真的浪费时间。

登录验证在开发中还经常遇到,尤其是几个系统要集成时必然要考虑单点登录的方案,目前用的最多的也还是CAS单点。看草稿箱有这样的一篇文章就发一下。

一、实现分析

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录(1);根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket(2);用户再访问别的应用的时候(3,5)就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性(4,6)。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。

从上面的视图可以看出,要实现SSO,需要以下主要的功能:

  • 所有应用系统共享一个身份认证系统。
    统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。
  • 所有应用系统能够识别和提取ticket信息
    要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

上面的功能只是一个非常简单的SSO架构,在现实情况下的SSO有着更加复杂的结构。有两点需要指出的是:

  • 单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,如下图所示。事实上,只要统一认证系统,统一ticket的产生和效验,无论用户信息存储在什么地方,都能实现单点登录。

  • 统一的认证系统并不是说只有单个的认证服务器,如下图所示,整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。如下图,当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统4的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(例如SAML)来交换认证信息,仍然能够完成SSO的功能。

二、方案对比

1、OpenSSO

曾经Sun的一款开源产品,从很少的那一点点中文资料上来看,这个能实现我需要的那种SSO模式。从SUN被Oracle收购之后,Oracle便关闭了OpenSSO这个项目,现在在网上下不到OpenSSO的安装文件。而且以前的那些在SUN发布的很多相关的帮助文档,大多数链接都失效了,全都指向了Oracle的同一个页面,找不到文档中对应的安装文件。

2、OpenAM

OpenAM的原型应该就是OpenSSO,据说是在Oracle关闭OpenSSO时,被“解救”下来的。在OpenAM的官网上能找到相关的帮助文档,这种方法使用的LDAP服务器是OpenDS,而既存系统在OAS上使用的是OID(Oracle Internet Directory),客户希望沿用OID这个LDAP服务器,(恨死他们了),从OpenAM的安装过程来看,OpenAM似乎不支持OID,但是,在网上找到一些资料似乎修改一些配置还是可以做到的。

OpenAM 是一个领先的开源认证、授权的产品,可用于替换即将被取消的 OpenSSO。

OpenAM 提供核心的标识服务用来简化实现在一个网络架构中的透明单点登录,包括集中式或者分布式的单点登录。主要的特性有:

完全符合开源AAA产品;

AAA协议:计算机安全领域的协议,AAA指:鉴权,授权,计费(Authentication, Authorization, Accounting)

简单易用、易配置;

纯Java开发;

可轻松配置联合认证系统,并集成到已有项目中。

最新的功能:

支持 XACML 协议

100%支持 OAuth 认证协议

企业监控

3、Kerberos 也提供另外一种方式的 SSO ,即基于 Windows 域的 SSO

Spring Security Kerberos:将Windows Active Directory认证(或其它支持Kerberos的设施)与Spring Security集成来实现单点登录。

Spring Security Kerberos:Spring Security SAML:Spring Security CAS:都是针对单点登录服务器的客户端实现

4、CAS 是 Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO 的 Java 项目,就有 8 个使用 CAS 。这些统计可能言过其实,但有一点可以肯定的是, CAS 是最简单实效,而且足够安全的 SSO 选择,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS具有以下特点:

开源的企业级单点登录解决方案。

CAS Server 为需要独立部署的 Web 应用。

CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
5、shiro能不能做单点登录?

shiro的单点登录是通过集成cas实现的
6、通过session共享,需要做的太多,比如

不能实现跨域,需要自己实现(即使各service可以访问同一个session服务器,但是浏览器端跨域后,用户没有凭证TGT证明自己登陆了)

退出登陆需要自己实现,可以参考cas系统的退出

要自己做权限管理

要自己实现sevice控制,把非法的service排除在外

需要自己实现oauth

而上面这些CAS都做好了

http://blog.csdn.net/matthewei6/article/details/50636301

原文地址:https://www.cnblogs.com/doit8791/p/7572677.html

时间: 2024-10-03 03:26:34

单点登陆的相关文章

集成基于OAuth协议的单点登陆

在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例如Google就使用OAuth协议来管理它的帐户. 相较于CAS协议,OAuth协议不仅仅可以完成对用户凭证的验证,更可以提供权限管理的功能.在这些权限管理功能的支持下,一个应用甚至可以访问其它使用相同OAuth服务的应用的数据,从而完成应用间的交互. OAuth集成示例 现在我们就来看一个通过OA

WebLogic Server的单点登陆功能--转载

在WebLogic 8.1最新的 SP4版本中,最引人注目的要算是在安全方面,提供了用于和Microsoft Windows客户端进行Single Sign-On的Single Pass Negotiate Identity Assertion Provider.通过该Provider可以轻松完成从前认为技术难度很高的和Windows客户端的Single Sign-On. 这个简单,低成本的SSO解决方案相信对大多数的企业应用来说更具吸引力: 用户只需要开机时登录Windows域,就可以以登录用

单点登陆的测试

今天做了个单点登陆 . 但是怎么测试呢? 下面请看详解: 源码中是这样的: /** * 单点登录改造 * * @param request * @param response * @return * @throws IOException * @throws HttpException * @throws IOException */ @RequestMapping(value = "/rcbSingleLoginCheck.do") public Object singleLogin

ASP.NET在不同情况下实现单点登陆(SSO)的方法

第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web.config里Authentication节form设定的name信息,如 <authentication mode="Forms"> <forms loginUrl="login.aspx" name=".ASPXAUTH" pa

单点登陆sso实现

需求: 多个bs业务系统,在某个业务系统登陆后,访问其他bs应用系统无需重复登陆. 制约:必须同一浏览器. 解决方案: 关键词:cookie,跨域,sso 环境 l Passport.com 登陆认证服务 l pis.com 病理业务系统 l lis.com 检验业务系统 l  login 拦截器:验证请求是否有令牌,令牌是否合法() l  令牌 ticket 括号内为增强功能 l  用户访问pis.com,拦截器发现无令牌或令牌无效,跳转至passport.com的登陆页面(防止恶意测试密码,

cookie+memcached实现单点登陆

10年的时候在iteye的第一篇文章记录了一下当时怎么实现我们系统的单点登陆.不过那个时候文章写的不好,思路也很浮躁,很难看懂,在csdn的第一篇技术博客打算重新温顾一下当时实现单点登陆的思路.先来看看什么叫单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制. --百度百科 为什么要实

集成基于CAS协议的单点登陆

相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点登陆服务的应用时就不再需要重新登陆了.而CAS协议则正是各单点登陆产品所需要实现的协议,其全称为Central Authentication Service. 那为什么要写这篇博客呢?这是因为在为公司的产品集成SSO的时候,我发现如果软件开发人员不了解CAS协议,那么他在集成出现错误的时候将完全没有

SSO单点登陆环境搭建

SSO单点登陆的概念网上已经很多了,文章并不对这些概念性的东西进行过多的讨论,直接通过代码进行说明,具体的环境搭建代码已经上传git : http://git.oschina.net/alexgaoyh/SSOTest 需要注意的地方,已经写到README.md文件中了,如在本地搭建环境的话,请注意文件中的那些注意事项.博客并不进行过多介绍. 未登录时的页面验证: 登陆后的页面: 此时接着访问另外一个客户端页面,直接可以看到欢迎信息,能够证明此时已经处于登陆状态了.

两种单点登陆设计

单点登陆设计SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一      现在很多企业级应用都基本会去实现单点登陆功能,这样对于用户体验上会有不错的加强.不需要重复登陆多次.好了废话少说,我今天主要介绍两种单点登陆设计. 第一种:最简单的单点登陆设计,如下图: 如图所示:当直接访问各类业务系统时,在页面

php 用CAS实现SSO单点登陆及登出功能

php用CAS实现SSO单点登陆及登出功能 一..CAS服务器搭建 CAS服务器端下载地址:http://downloads.jasig.org/cas/ 解压cas-server-4.0.0-release.zip将modules目录下的cas-server-webapp-4.0.0.war改名称为cas.war复制到tomcat的webapps下,启动tomcat,访问:http://localhost:8080/cas/login 就可以看到登录界面了: cas服务端默认采用的是 用户名=