Hi

 

My team is working with CAS (5.2.3) and delegated SAML authentication via 
pac4j libraries. What we have so far:

1.      3 separate services, each is configured through spring to 
authenticate with CAS.

2.      CAS is configured to delegate authentication to SAML IDP via 
*cas.properties* config

3.      We extended the ClientAuthenticationHandler with small changes and 
registered it through a @Configuration class.

 

With this basic setup, we are able to get the SSO to work correctly across 
the services, against okta sample IDP, with a flow similar to this:

*SP -> CAS -> Delegate Authentication -> Redirect to IDP -> Input 
credentials -> IDP returns SAML response -> CasAuthenticationFilter 
finishes the authentication and ST issuing -> System redirects the original 
‘service’ url.*

 

However, we are trying to get *single logout (SLO)* to work with the 
existing framework, we got no luck. 

It appears the system only logging out the local service, but not other 
services.

 

*What we have at the moment:*

For each of the service module, we have the following configured:

1. LogoutFilter via spring bean

2. SingleSignOutFilter via web.xml or spring bean

3. SingleSignOutHttpSessionListener in web.xml


Also we have ServiceRegistry json with logoutType: BACK_CHANNEL


spring config

  <http use-expressions=*"true"* entry-point-ref=
*"casAuthenticationEntryPoint"*>

              <intercept-url pattern=*"/resources/**"* access=*"permitAll"* 
/>

             <intercept-url pattern=*"/manifest"* access=*"permitAll"* 
method=*"GET"* />

             <intercept-url pattern=*"/**"* access=*"isAuthenticated()"* />

             <!-- enable *csrf* protection -->

             <csrf disabled=*"true"* />

             <custom-filter ref=*"requestSingleLogoutFilter"* before=
*"LOGOUT_FILTER"* />

             <custom-filter ref=*"singleLogoutFilter"* before=*"CAS_FILTER"* 
/>

             <custom-filter ref=*"casAuthenticationFilter"* after=
*"CAS_FILTER"* />

      </http>

 

      <bean id=*"singleLogoutFilter"* class=
*"org.jasig.cas.client.session.SingleSignOutFilter"*

             p:ignoreInitConfiguration=*"true"* ß-----not sure if we need 
this

             p:casServerUrlPrefix=*"${cas.server.app}/"* />

            

       <bean id=*"requestSingleLogoutFilter"*       class=
*"org.springframework.security.web.authentication.logout.LogoutFilter"*

             p:filterProcessesUrl=*"/logout/cas/"* >

             <constructor-arg value=
*"${cas.server.app}/logout?service=${calendar.client.app}/"* />

             <constructor-arg>

                    <bean       class=
*"org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"*
></bean>

             </constructor-arg>

      </bean>


In web.xml of each module, we have:

 <listener>

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

  <filter-name>CAS Single Sign Out Filter</filter-name>  

    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</
filter-class> 

  </filter>

  <filter-mapping>  

       <filter-name>CAS Single Sign Out Filter</filter-name>  

    <url-pattern>/*</url-pattern>

  </filter-mapping>


*service registry:*

{

  "@class": *"org.apereo.cas.services.RegexRegisteredService"*,

  "serviceId": *"^(http|https|imaps)://.*"*,

  "name": *"HTTPS and IMAPS"*,

  "id": 10000001,

  "description": *"This service definition authorizes all application urls 
that support HTTPS and IMAPS protocols."*,

  "evaluationOrder": 1,

  "logoutType" : *"BACK_CHANNEL"*,

….



*Problem:*

When we issue a logout via: https://localhost:8443/platformadmin/logout/cas/ , 
we see the *LogoutFilter* is triggered and in *doFilter() *session is 
invalidated.

*SingleSignOutHttpSessionListen**er#sessionDestroy() *is immediately 
triggered after.


Then *SingleLogoutFilter* is triggered, in which *SingleSignoutHandler#*
*process*(..) method, BACK_CHANNEL logout is triggered.

In the console log however, I only see the ST of the current service 
(platformadmin) is destroyed.


If we access any modules *other than* *platformadmin*, we are directed to 
the app automatically.

It seems we are only logged out of the current service modules (local 
logout), but didn’t logout from the other service modules.


What configuration are we missing? I see posts in this group where they 
have SLO working, 

We'd much appreciate if someone could provide a summary of their 
configuration.


Please let us know if you have any advices


Thanks!

-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/43525944-da4f-4891-ae95-3f81eb7f07c0%40apereo.org.

Reply via email to