IDP-init SLO for SP-init SSO user

Does Component Space support IDP-init SLO to work against sending out SLO request to an SP ( to which user had previously SSO’d in via SP-initiated SSO) ?

I tried this but I see that canSLO ( inside LogOff method in AccountController at IDP) returns false. And when I comment ‘canSLO’ just for checking, it fails at initiateSLO:

I am using same browser session for SP-init SSO and IDP-init SLO ( via logoff button click)


There are no partner service providers to logout.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: ComponentSpace.SAML2.Exceptions.SAMLProtocolException: There are no partner service providers to logout.
Source Error:
Line 396: {Line 397: // Request logout at the service providers.Line 398: SAMLIdentityProvider.InitiateSLO(Response, null, null);Line 399:Line 400: return new EmptyResult();

Source File: C:\rahul\SAMLv20-evaluation\SAML for .NET\Examples\SSO\MVC\MvcExampleIdentityProvider\Controllers\AccountController.cs Line: 398
Stack Trace:
[SAMLProtocolException: There are no partner service providers to logout.] ComponentSpace.SAML2.InternalSAMLIdentityProvider.InitiateSLO(HttpResponseBase httpResponse, String logoutReason, String relayState) +170 ComponentSpace.SAML2.SAMLIdentityProvider.InitiateSLO(HttpResponseBase httpResponse, String logoutReason, String relayState) +43 MvcExampleIdentityProvider.Controllers.AccountController.LogOff() in C:\rahul\SAMLv20-evaluation\SAML for .NET\Examples\SSO\MVC\MvcExampleIdentityProvider\Controllers\AccountController.cs:398 lambda_method(Closure , ControllerBase , Object[] ) +61 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary parameters) +157 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary parameters) +27 System.Web.Mvc.Async.<>c.b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 System.Web.Mvc.Async.WrappedAsyncResult.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 System.Web.Mvc.Async.<>c__DisplayClass11_0.b__0() +58 System.Web.Mvc.Async.<>c__DisplayClass11_2.b__2() +228 System.Web.Mvc.Async.<>c__DisplayClass7_0.b__1(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 System.Web.Mvc.Async.<>c__DisplayClass3_6.b__4() +35 System.Web.Mvc.Async.<>c__DisplayClass3_1.b__1(IAsyncResult asyncResult) +100 System.Web.Mvc.Async.WrappedAsyncResult.CallEndDelegate(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.<>c.b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +11 System.Web.Mvc.Async.WrappedAsyncVoid.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +45 System.Web.Mvc.<>c.b__151_2(IAsyncResult asyncResult, Controller controller) +13 System.Web.Mvc.Async.WrappedAsyncVoid.CallEndDelegate(IAsyncResult asyncResult) +22 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c.b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +28 System.Web.Mvc.Async.WrappedAsyncVoid.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase.End() +49 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9873649 System.Web.<>c__DisplayClass285_0.b__0() +26 System.Web.StepInvoker.Invoke(Action executionStep) +101 System.Web.<>c__DisplayClass4_0.b__0() +22 Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule.OnExecuteRequestStep(HttpContextBase context, Action step) +64 System.Web.<>c__DisplayClass284_0.b__0(Action nextStepAction) +54 System.Web.StepInvoker.Invoke(Action executionStep) +85 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +9979713 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159

Yes, all SAML flows, including IdP-initiated and SP-initiated SLO, are supported.
We maintain SAML session state via a cookie. This SAML session state is required to support SLO.
I suspect the cookie isn’t being presented by the browser for some reason.
Please enable SAML trace and send the generated log file as an email attachment to support@componentspace.com mentioning your forum post.
Make sure the trace includes the successful SSO and the failing SLO.
https://www.componentspace.com/Forums/17/Enabing-SAML-Trace
Thanks.