[java-identity-provider COMMIT] /trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml

noreply at shibboleth.net noreply at shibboleth.net
Tue Apr 19 16:41:29 EDT 2016


Author: scantor
Date: Tue Apr 19 16:41:28 2016
New Revision: 8205

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=8205&view=rev
Log:
IDP-867 - Allow for no return endpoint when Asynchronous SLO extension used

https://issues.shibboleth.net/jira/browse/IDP-867

Modified:
    trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml

Modified: trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml?rev=8205&r1=8204&r2=8205&view=diff
==============================================================================
--- trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml	(original)
+++ trunk/idp-conf/src/main/resources/system/flows/saml/saml2/slo-front-abstract-flow.xml	Tue Apr 19 16:41:28 2016
@@ -19,19 +19,25 @@
     -->
     
     <!--
-    We splice into the parent flow by checking for a LogoutResponse after the inbound
-    message subflow runs, to bypass the rest of the parent flow. Anything else passes
-    control back to the next parent state. 
+    We splice into the parent flow by checking for a LogoutResponse or an Async LogoutRequest
+    after the inbound message subflow runs, to bypass the rest of the parent flow. Anything else
+    passes control back to the next parent state. 
     -->
     <subflow-state id="DoInboundInterceptSubflow">
         <transition on="proceed" to="CheckLogoutResponse" />
     </subflow-state>
     
     <decision-state id="CheckLogoutResponse">
+        <if test="opensamlProfileRequestContext.getInboundMessageContext().getMessage() instanceof T(org.opensaml.saml.saml2.core.LogoutResponse)"
+            then="LogoutResponseView" else="CheckAsync1"/>
+    </decision-state>
+
+    <decision-state id="CheckAsync1">
         <!-- If parent DoInboundInterceptSubflow transition changes on 'proceed', the else clause needs to also change. -->
-        <if test="opensamlProfileRequestContext.getInboundMessageContext().getMessage() instanceof T(org.opensaml.saml.saml2.core.LogoutResponse)"
-            then="LogoutResponseView" else="OutboundContextsAndSecurityParameters"/>
-    </decision-state>
+        <if test="opensamlProfileRequestContext.getInboundMessageContext().getMessage() instanceof T(org.opensaml.saml.saml2.core.LogoutRequest) and opensamlProfileRequestContext.getInboundMessageContext().getMessage().getExtensions() != null and !opensamlProfileRequestContext.getInboundMessageContext().getMessage().getExtensions().getUnknownXMLObjects(T(org.opensaml.saml.ext.saml2aslo.Asynchronous).DEFAULT_ELEMENT_NAME).isEmpty()"
+            then="ExtractSubject" else="OutboundContextsAndSecurityParameters" />
+    </decision-state>
+    
 
     <!-- LogoutRequest handling starts by loading client storage if needed. -->
         
@@ -107,7 +113,7 @@
             <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().containsBean('shibboleth.CustomViewContext') ? flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.CustomViewContext') : null" result="viewScope.custom" />
         </on-render>
         
-        <transition on="proceed" to="CheckAsync" />
+        <transition on="proceed" to="CheckAsync2" />
         <transition on="propagate" to="LogoutPropagateView" />
         <transition on="end" to="LogoutCompleteView" />
     </view-state>
@@ -128,7 +134,7 @@
             <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().containsBean('shibboleth.CustomViewContext') ? flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.CustomViewContext') : null" result="viewScope.custom" />
         </on-render>
         
-        <transition on="proceed" to="CheckAsync" />
+        <transition on="proceed" to="CheckAsync2" />
     </view-state>
 
     <view-state id="LogoutCompleteView" view="logout-complete">
@@ -143,10 +149,10 @@
             <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().containsBean('shibboleth.CustomViewContext') ? flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.CustomViewContext') : null" result="viewScope.custom" />
         </on-render>
 
-        <transition on="proceed" to="CheckAsync" />
+        <transition on="proceed" to="CheckAsync2" />
     </view-state>
     
-    <decision-state id="CheckAsync">
+    <decision-state id="CheckAsync2">
         <if test="opensamlProfileRequestContext.getInboundMessageContext().getMessage().getExtensions() == null or opensamlProfileRequestContext.getInboundMessageContext().getMessage().getExtensions().getUnknownXMLObjects(T(org.opensaml.saml.ext.saml2aslo.Asynchronous).DEFAULT_ELEMENT_NAME).isEmpty()"
             then="BuildResponse" else="AsyncLogoutView" />
     </decision-state>



More information about the commits mailing list