SSO方案中太多平行对称的分支选择,就像博而赫斯那小径分岔的花园。刚手写完一个超迷你劲袖珍的SSO,顺着 SAML2.0和OpenID的规范,记录一下这些分岔点:
-
流程是从身份提供者还是消费者发起?
身份提供者,也就是SSO Server了,又叫Id Provider,简称Idp。而身份消费者,SSO Client,在SAML里叫做Sp。
身份提供者发起流程中,用户登录进SSO Server,SSO Server展现一个Portal/菜单,上有到各SSO Client的URL若干,每个URL上都已经加了身份信息的料。
身份消费者发起流程中,Portal/菜单里是无料的普通URL(甚至用户直接就先跑去了Client的网站),SSO
Client发现本地Session里没有用户的身份信息,只好redirect重返SSO Server,最后Server再以有料的URL跳转回去。
显然,前一种流程少了两次Redirect,速度更快,但Portal/菜单中的每个URL都深深的耦合着SSO Sever,又或者,有时根本就没有这么一个中央Portal的存在。
-
URL参数中传送身份信息还是仅仅是指针
?
SSO Server 向
Client跳转时,可以大大方方的把身份信息放在URL参数里直接传输,也可以小心翼翼的只扔过来一个随机字符串(SAML中叫
Artifact),Client拿着这个随机字串再到后台偷偷摸摸用WebService/REST接口问SSO Server拿到完整的身份信息。
显然,前一种方式少了一次后台查询,速度更快,但没有后一种方式安全,后一种方式的WebService/REST接口还可传输任意格式的很多很多的信息。
-
安全措施是全文加密还是仅仅签名
?
有人喜欢全文(再加一个nonce
)加密成长长一段密文,心中充满了安全感。也有人大胆的明文传输内容,只在最后加个签名来防伪(签名用简单的明文+密钥散列,或者HMAC加密散列算法)
前者用户只看到长长一段火星文,不会让用户偷窥到什么,但字串暴长且加解密本身比较消耗CPU。
-
SSO Client会自己解密/比对签名吗?
一般,SSO Client会根据约定自己解密或根据明文生成签名进行比对,还要负责验证那个nonce不会已被使用或者已经超时等等。
但也会可以有很懒的client,不懂这么复杂的安全加密算法,直接把收到的内容在后台用WebService/Rest接口发回给SSO Server帮忙搞定。
刚刚手写那个SSO,身份提供者发起流程,在URL参数中传输加密的身份信息,由SSO Client自行解密,so,超简单...
安民告示:
由于晓钢的服务器出了点故障,SpringSide的主页和Wiki暂时不能访问,而以下部分是完好的:
- 论坛:http://forum.springside.org.cn
- 源码:http://springside.googlecode.com/svn/springside3/trunk/
- 下载:http://www.sf.net/projects/springside
分享到:
相关推荐
本文档旨在为初次接触CAS(Central Authentication Service)系统的用户提供一个实际的操作指南,通过一个具体的跨域单点登录(Single Sign-On, SSO)示例来帮助读者快速理解和掌握CAS的工作原理及其在SSO场景中的...
# sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库...
- **CAS Client**:集成到各个需要支持SSO的应用程序中,用来与CAS Server进行通信,获取或验证票据,从而完成用户的认证过程。 CAS的特点包括: - 支持多种编程语言:除了Java之外,还支持Perl、Python、ASP等语言...
单点登录(Single Sign-On,简称SSO)是一种网络应用中的身份验证机制,它允许用户在一次登录后,就可以在多个相互独立的应用系统之间自由切换,而无需再次进行身份验证。这种技术极大地提升了用户体验,同时也简化...
这篇博客“超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感”深入探讨了如何在这样的环境中正确配置Filter和Mapping,以实现单点登录(Single Sign-On, SSO)以及URL重写。下面我们将...
1、boy-sso-example项目中直接在web.xml中添加如下代码,需要注意的是需要依赖boy-sso-client这个项目。 <filter-name>SSOAuth <filter-class>com.boy.sso.client.SSOFilter</filter-class> <!-- 认证...
在Java中实现SSO,常见的框架有Spring Security和CAS(Central Authentication Service)。这个例子可能是基于其中之一或自定义实现的。下面我们将深入探讨SSO的工作原理和可能的Java实现方法。 1. **SSO工作原理**...
在其他子系统中,当需要验证用户身份时,可以通过向SSO服务器发送Token验证请求来完成。示例请求如下: ```http GET /sso/validate?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3...
在 Shiro 中实现 SSO 需要以下关键步骤: 1. **自定义 Token**: 自定义的 `TrustedSsoAuthenticationToken` 类是为了存储从 CAS 服务获取的用户名。它实现了 `AuthenticationToken` 接口,其中 `getPrincipal()` ...
同时,还可以通过ignoreUrlPatternType和ignorePattern来指定应忽略的URL模式,以便于优化SSO的处理逻辑。 【标签】中的“区块链”可能意味着在政务服务中引入了区块链技术,用于提升数据安全性和透明度,但文档...
第一步:在 sso 父 pom.xml 中引入 jackson 的 core(核心)、bind(数据绑定)以及注解三个包的依赖。这些依赖项包括 jackson-core、jackson-databind 和 jackson-annotations。这些依赖项用于将后台 Controller ...
SSO 登录用户的登录名,可选配置。 --> <filter-name>CAS HttpServletRequest Wrapper Filter org.jasig.cas.client.util.HttpServletRequestWrapperFilter <filter-name>CAS HttpServletRequest ...
在JavaWeb项目中实现SSO,需要理解CAS协议的工作原理,以及如何利用Spring Security这样的框架来简化实现。通过`ExampleLogin`这样的源代码,你可以深入学习和掌握这些技能,为构建更复杂的企业级应用打下坚实基础。
<url-pattern>/remoteLogin</url-pattern> ``` 2. **更新cas-servlet.xml**:增加一个新的`handlerMappingB`,处理`/remoteLogin`的请求,同时在`bean`中添加`remoteController`,配置对应的流程。 ```xml ......
<url-pattern>/</url-pattern> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener ... ``` 4. **配置属性文件**:创建一个`cas.properties`文件,其中包含了与CAS服务器通信所...
### CAS实现单点登录(Single Sign-On, SSO)及单点登出(Single Sign-Out, SSO)机制详解 #### 一、引言 随着企业级应用的日益增多,多系统之间的集成变得越来越重要。单点登录技术应运而生,解决了用户需要在多个...
2. **修改 web.xml**:在应用的 web.xml 文件中添加必要的配置元素,以实现 CAS 的单点登出(Single Sign-Out, SSO)和身份验证功能。 - **配置 CAS 监听器**:`<listener-class>org.jasig.cas.client.session....
Spring Boot 整合 CAS Client 是一种流行的解决方案,用于实现单点登录(Single Sign-On,简称 SSO)。在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS Client 负责处理对客户端受保护...