I think I'd better add some more details information about my case: 

Currently I am using CAS 3.3.5, the client is 3.1.10. All the CAS server and 
client application are sitting in same server (weblogic), and all the client 
apps are participant of SSO. The sign on process works very good for all the 
client applications, and, I can also sign out client application if I use 
request.getSession().invalidate(). Now the problem is that I couldn't get 
single sign out work.....

Here is my Client app's web.xml setting: 


        <listener>
                
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
        </listener>


        <filter>
           <filter-name>CAS Single Sign Out Filter</filter-name>
           
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>   
     
        </filter>


        
                <filter>
                <filter-name>CAS Authentication Filter</filter-name>
                
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
                <init-param>
                        <param-name>casServerLoginUrl</param-name>
                        
<param-value>https://mydev.mydomain.org:7002/cas/login</param-value>
                </init-param>
                <init-param>
                        <param-name>serverName</param-name>
                        
<param-value>https://mydev.mydomain.org:7002</param-value>
                </init-param>
                <init-param>
                        <param-name>renew</param-name>
                        <param-value>false</param-value>
                </init-param>
                <init-param>
                        <param-name>gateway</param-name>
                        <param-value>false</param-value>
                </init-param>
        </filter>
        
        <filter>
                <filter-name>CAS Validation Filter</filter-name>
                
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
                <init-param>
                        <param-name>casServerUrlPrefix</param-name>
                        
<param-value>https://mydev.mydomain.org:7002/cas/</param-value>
                </init-param>
                <init-param>
                        <param-name>serverName</param-name>
                        
<param-value>https://mydev.mydomain.org:7002</param-value>
                </init-param>
                

        </filter>
        
        <filter>
                <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
                
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
        </filter>
        
        <filter>
                <filter-name>CAS Assertion Thread Local Filter</filter-name>
                
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
        </filter>
        

        <filter-mapping>
                <filter-name>CAS Authentication Filter</filter-name>
                <url-pattern>/protected/*</url-pattern>
        </filter-mapping>

        <filter-mapping>
                <filter-name>CAS Validation Filter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
         
        <filter-mapping>
                <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <filter-mapping>
                <filter-name>CAS Assertion Thread Local Filter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <filter-mapping>
                <filter-name>CAS Validation Filter</filter-name>
                <url-pattern>/proxyCallback</url-pattern>       
        </filter-mapping>
        
        <filter-mapping>
           <filter-name>CAS Single Sign Out Filter</filter-name>
           <url-pattern>/*</url-pattern>
        </filter-mapping>


Here is the argumentExtractorsConfiguration.xml:

  <beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:p="http://www.springframework.org/schema/p";
       xmlns:util="http://www.springframework.org/schema/util";
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
       http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-2.0.xsd";>
        <description>
                Argument Extractors are what are used to translate HTTP 
requests into requests of the appropriate protocol (i.e. CAS, SAML, SAML2,
                OpenId, etc.).  By default CAS and SAML are enabled.
        </description>
        <bean
                id="casArgumentExtractor"
                class="org.jasig.cas.web.support.CasArgumentExtractor"
         p:httpClient-ref="httpClient" />

        <bean id="samlArgumentExtractor" 
class="org.jasig.cas.web.support.SamlArgumentExtractor"
             p:httpClient-ref="httpClient" />
        
        <util:list id="argumentExtractors">
                <ref bean="casArgumentExtractor" />
                <ref bean="samlArgumentExtractor" />
        </util:list>
</beans>


>From Client application, I just simply add a link, which redirect to: 
https://mydev.mydomain.org:7002/cas/logout?url=/casClient


After I click this logout link in client app, I do see CAS's log out confirm 
page. Based on my understand, CAS server is supposed to send out "POST" request 
to all registered applications, but seems it not happen....

I check cas.log in app server, which has no records about log out....or any 
records about httpClient....Here is part of cas.log: 

2010-08-04 16:51:15,958 INFO 
[org.jasig.cas.authentication.AuthenticationManagerImpl] - 
AuthenticationHandler: 
edu.utsw.ais.cas.authentication.UTSWSimpleAuthenticationHandler successfully 
authenticated the user which provided the following credentials: [username: 
testUser]
2010-08-04 16:51:16,005 INFO [org.jasig.cas.CentralAuthenticationServiceImpl] - 
Granted service ticket [ST-1-uB5GQK0DlpPnJdZc57Ix-cas] for service 
[https://mydev.mydomain.org:7002/casClient2/protected/index.jsp] for user 
[testUser]
......

Then there are no any records about sending requst back to client app, not even 
any info about "sign out"....


I also check access.log in my weblogic server, and here is record saved: 


129.112.115.6 - - [04/Aug/2010:16:09:51 -0500] "GET 
/casClient2/protected/index.jsp?ticket=ST-16-HzmgD6XNY0O1eIrjCv5P-cas HTTP/1.1" 
302 327 
129.112.115.6 - - [04/Aug/2010:16:09:51 -0500] "GET 
/casClient2/protected/index.jsp HTTP/1.1" 200 1023 
172.18.101.182 - - [04/Aug/2010:16:10:00 -0500] "POST 
/casClient2/protected/index.jsp HTTP/1.1" 302 511 
129.112.115.6 - - [04/Aug/2010:16:10:00 -0500] "GET /cas/logout?url=/casClient2 
HTTP/1.1" 200 1671 
172.18.101.182 - - [04/Aug/2010:16:10:00 -0500] "GET 
/cas/login?service=https%3A%2F%2Fmydev.mydomain.org%3A7002%2FcasClient2%2Fprotected%2Findex.jsp
 HTTP/1.1" 200 3696 
129.112.115.6 - - [04/Aug/2010:16:10:41 -0500] "GET /casClient2 HTTP/1.1" 302 
289 

There are no any "POST" request received after the "GET" of log out request... 

In CAS server, one thing I have changed is I use a customized authentication 
handler to do authentication. I am not sure this will cause the issue? Here is 
the part of deployerConfigContext.xml: 

        <bean id="authenticationManager"
                class="org.jasig.cas.authentication.AuthenticationManagerImpl">
                <property name="credentialsToPrincipalResolvers">
                        <list>
                                <bean
                                        
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver"
 />
                                <bean
                                        
class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"
 />
                        </list>
                </property>
                <property name="authenticationHandlers">
                        <list>
                                <bean 
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
                                        p:httpClient-ref="httpClient" />
                                <bean
                                        
class="edu.utsw.ais.cas.authentication.UTSWSimpleAuthenticationHandler" />
                        </list>
                </property>
        </bean>
        
        <bean id="userDetailsService" 
class="edu.utsw.ais.cas.authentication.service.ServiceUserDetailsServiceImpl">
                
        </bean> 

        <bean id="attributeRepository"
                
class="org.jasig.services.persondir.support.StubPersonAttributeDao">
                <property name="backingMap">
                        <map>
                                <entry key="uid" value="uid" />
                                <entry key="eduPersonAffiliation" 
value="eduPersonAffiliation" /> 
                                <entry key="groupMembership" 
value="groupMembership" />
                        </map>
                </property>
        </bean>
        
                
        <bean id="serviceRegistryDao" 
class="org.jasig.cas.services.JpaServiceRegistryDaoImpl"
   p:entityManagerFactory-ref="entityManagerFactory" />
                
        <bean id="entityManagerFactory" 
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
                <property name="dataSource" ref="dataSource"/>
                <property name="jpaVendorAdapter">
                        <bean 
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                                <property name="generateDdl" value="true"/>
                                <property name="showSql" value="true" />
                        </bean>
                </property>
                <property name="jpaProperties">
                        <props>
                                <prop 
key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
                                <prop key="hibernate.hbm2ddl.auto">update</prop>
                        </props>
                </property>
        </bean>

        <bean id="transactionManager" 
class="org.springframework.orm.jpa.JpaTransactionManager">
                <property name="entityManagerFactory" 
ref="entityManagerFactory"/>
        </bean>

        <tx:annotation-driven transaction-manager="transactionManager"/>
                
                
        <bean id="dataSource" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
                                >
        <property name="driverClassName" 
value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
        <property name="url" 
value="jdbc:sqlserver://dbserver.mydomain.org;databaseName=casdb"/>
        <property name="username" value="cas"/>            
        <property name="password" value="cas"/>
           
    </bean>             
                
                



 Seems like I've never been so close to creating our own functional CAS 
server....Any suggestion is hightly appreciated....Thanks you very much. 




>>> Bryan Wooten <[email protected]> 8/4/2010 12:04 PM >>>
Here is how to do it:

https://wiki.jasig.org/display/CASC/Configuring+Single+Sign+Out 

Just add the listener and filter to your web.xml.

It is working well for me.

Bryan Wooten

[email protected] 
Work: 801.585.9323
Cell: 801.414.3593


-----Original Message-----
From: Jiangpeng Shi [mailto:[email protected]] 
Sent: Wednesday, August 04, 2010 10:51 AM
To: [email protected] 
Subject: [cas-user] a new single sign out question

I asked a question about an issue that I couldn't logout from SSO by using 
request.getSession().invalidate(), and acevedo gave me a very good suggestion. 
He helped me solve my issue very well. But seems I am still having some issues 
with Single sign out: How can I sign out all client apps when I sign out from 
one of client apps? 
My current case is: 
I have 4 client app, which all using CAS and SSO. For each client app, I am 
using following code in each client to log out:

request.getSession().invalidate();
response.sendRedirect("https://cas.mywork.org:7088/cas/logout?url=/myapp";);

For each client, the log out works well, but, seems I have to logout each 
client one by one, which means I can't logout all client apps all together by 
just signing out from one client application. Are there any way that we can let 
user sign out from app and then sign out all other Single Sign On client apps? 

Thanks a lot in advance. 

--Jiangpeng Shi




-- 
You are currently subscribed to [email protected] as: 
[email protected] 
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user 


-- 
You are currently subscribed to [email protected] as: 
[email protected] 
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user 


-- 
You are currently subscribed to [email protected] as: 
[email protected]
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user

Reply via email to