Your Single Log Out Filter has to be first in the chain if you want it to process log out requests.
On Wed, Aug 4, 2010 at 6:03 PM, Jiangpeng Shi < [email protected]> wrote: > 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 > > -- 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
