`
schy_hqh
  • 浏览: 556013 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

SSO-CAS单点登录(二)

 
阅读更多

Ticket 有效期
Proxy代理认证
合理设置TGC超时时间, 默认是2个小时
ST service ticket
PT proxy ticket
TGC(Ticket Granting Cookie)存储在客户端浏览器中,是在CAS服务器上获取对应ST(Service Ticket)的凭据

=====================================================================
注销后跳转到指定页面
打开cas\cas-server-3.4.10\cas-server-webapp\src\main\webapp\WEB-INF\cas-servlet.xml


为logoutController设置属性:p:followServiceRedirects="true"

<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
        p:centralAuthenticationService-ref="centralAuthenticationService"
        p:logoutView="casLogoutView"
        p:warnCookieGenerator-ref="warnCookieGenerator"
        p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
        p:followServiceRedirects="true"/>

 
然后,在LogoutServlet中,为注销的链接拼接跳转的路径
【这里可以将serviceAddress写为CAS登录页面的路径,或其它页面的路径】

public void doSingleSignOut(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
    String serviceAddress = "http://localhost"+":"+request.getLocalPort()+request.getContextPath();
    response.sendRedirect("https://sso.gc.com:8443/cas/logout?service="+serviceAddress);
}

 

也可以直接在页面上注销,不用写servlet

<a href="https://sso.gc.com:8443/cas/logout?service=xxx">注销</a>

 
由于https默认端口为443,可以将Tomcat中的8443端口修改为443,则CAS服务地址可以省略端口:http://sso.gc.com/cas/login

=====================================================================

需要解决的问题:


1.CAS服务停了仍然能够访问?
用户已经认证成功后,对应项目会创建对应的Session来保持已登录的状态,所以在认证成功后,CAS服务停了,也能访问本项目
访问项目A,到CAS中心认证成功,正常访问项目A中的资源
此时,关闭CAS服务
再访问项目A中的资源,仍然能够正常访问(项目A已经创建了与浏览器关联的session)
再访问另一个项目B,由于项目B还没有创建Session,因此会到CAS服务中心进行验证,但CAS服务已经关闭了,所以项目B将不能访问

单点登出的原理:由CAS回调各个子系统,让子系统清除给的sessionId的会话,从而实现登出功能

这也解释了上面的问题:
CAS服务停止后,由于没有去回调子系统清除session,才导致已认证成功的系统仍然能够访问

2.Ticket有效期与Session有效期的区别,相互之间是什么关系?
首先,两者之间没有关系

3.CAS代理怎么用?



\=====================================================================

CAS返回更多信息到客户端

修改cas\cas-server-3.4.10\cas-server-webapp\src\main\webapp\WEB-INF\deployerConfigContext.xml

1.配置attributeRepository,替换掉默认使用的StubPersonAttributeDao
 

<!-- return more information to client-->
    <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
        <constructor-arg index="0" ref="dataSource"/>
        <constructor-arg index="1" value="select * from t_admin_user where {0}"/>
        <property name="queryAttributeMapping">
            <map>
                <!-- key为登录CAS的用户名name属性,value为数据库字段 -->
                <entry key="username" value="login_name"/>
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
                <!-- key为数据库字段名,value为客户端从Map获取数据使用的key -->
                <entry key="email" value="email"/>
                <entry key="login_name" value="login_name"/>
                <entry key="name" value="name"/>
                <entry key="password" value="password"/>
            </map>
        </property>
    </bean>

 上面将生成SQL:

select * from t_admin_user where login_name = #username#


2.注入attributeRepository到UsernamePasswordCredentialsToPrincipalResolver中

<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
    <property name="attributeRepository" ref="attributeRepository"/>
</bean>

 
3.修改InMemoryServiceRegistryDaoImpl中的RegisteredServiceImpl属性,增加<property name="ignoreAttributes" value="true" />
如,

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
    <property name="id" value="0" />
    <property name="name" value="HTTP" />
    <property name="description" value="Only Allows HTTP Urls" />
    <property name="serviceId" value="http://**" />
    <!-- 返回resultAttributeMapping -->
    <property name="ignoreAttributes" value="true" /> 
</bean>

 

4.修改cas\cas-server-3.4.10\cas-server-webapp\src\main\webapp\WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp
增加如下内容

<!-- response more infomation to client -->
<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
    <cas:attributes>
    <c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
        <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
    </c:forEach>
    </cas:attributes>
</c:if>

 

基于以上配置,客户端可以获取到更多关于登录用户的信息

默认情况下CAS只返回username,而实际项目中需要很多关于登录用户的信息

 

AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
if (principal != null) {
        Map<String, Object> attributes = principal.getAttributes();
        System.out.println(attributes.size());
        if (attributes.size() > 0) {
        System.out.println(attributes.get("email"));
        System.out.println(attributes.get("login_name"));
        System.out.println(attributes.get("name"));
        System.out.println(attributes.get("password"));
       
        }
}

 

分享到:
评论

相关推荐

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    sso/cas单点登录Java maven版 含服务端客服端

    SSO(Single Sign-On)是单点登录的缩写,是一种网络用户身份验证的机制,允许用户在一次登录后访问多个应用系统而无需再次验证。CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它...

    .net-casSSO-client.rar

    .NET CAS SSO客户端是一款专为.NET开发者设计的身份验证解决方案,它允许用户通过中央认证服务(Central Authentication Service,简称CAS)实现单点登录(Single Sign-On,简称SSO)。CAS是一种开放源码的Web身份...

    spring boot 实现SSO单点登陆

    spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...

    小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二

    《小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二》 单点登录(Single Sign-On,简称SSO)是企业信息化系统中一个重要的功能,它允许用户通过一次登录,就能访问多个相互独立的应用系统,无需多次输入用户名和密码。本...

    java-cas单点登录服务端

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS(Central Authentication ...

    小蚂蚁-CAS单点登录系列(3)-简单实施SSO

    【标题】:“小蚂蚁-CAS单点登录系列(3)-简单实施SSO” 单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,它允许用户在多个应用程序之间共享登录状态,只需要进行一次身份验证。在这个系列的第三部分中...

    SSO之CAS单点登录详细图文教程.zip

    本教程将通过“SSO之CAS单点登录详细图文教程.zip”这个压缩包,详细介绍如何部署CAS(Central Authentication Service)来实现SSO。 首先,让我们了解CAS的基本架构。CAS通常包括两个主要部分:服务端和客户端。...

    CAS单点登录SSO( Single Sign-On)

    CAS单点登录协议是解决多应用系统认证问题的有效方案。通过深入学习和理解CAS的工作机制,开发者能够更好地实现和维护安全、高效的SSO系统。同时,源码分析有助于定制化需求和故障排查,确保CAS在实际环境中的稳定...

    sso.rar_DotNetCasClient.dll_sso_sso 单点登录_单点登录_鍗曠偣鐧诲綍

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证技术,允许用户在一次登录后,无需再次输入凭证即可访问多个相互关联的应用系统。在IT领域,它极大地提升了用户体验和安全性,尤其对于大型企业或组织,管理...

    SSO之CAS单点登录详细教程.docx

    SSO之CAS单点登录详细教程.docx

    CAS--SSO单点用到的jar包

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)框架。SSO允许用户在访问多个应用系统时只需要进行一次身份验证,之后访问其他系统无需再次输入凭证,提高...

    SSO之CAS单点登录

    综上所述,SSO之CAS单点登录提供了一种高效、安全的身份验证解决方案,简化了用户访问多应用的流程,同时也便于管理员管理和监控用户行为。对于大型组织,采用CAS进行SSO集成可以显著提升用户体验并加强信息安全。在...

    SSO之CAS单点登录实例演示

    通过"SSO之CAS单点登录实例演示",我们可以实践这些步骤,了解如何设置和运行一个基本的CAS环境,进一步理解SSO的工作原理和实际应用。这个实例将帮助我们更好地掌握如何为自己的应用实现SSO功能,提升系统的安全性...

    Java进阶SSO单点登录技术CAS-快速上手与原理探究视频教程

    本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...

    SSO之CAS单点登录详细图文教程

    SSO(Single Sign-On)单点登录是一种网络身份验证机制,允许用户在多个相互关联的应用系统之间共享登录状态,只需一次登录即可访问所有系统。在这个详细的CAS(Central Authentication Service)单点登录教程中,...

    SSO之CAS单点登录客户端服务端jar包

    在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...

    cas 单点登录 解决方案.

    cas 单点登录解决方案 cas 单点登录解决方案是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。随着企业的发展,业务系统的数量...

Global site tag (gtag.js) - Google Analytics