Implement logout with SAML
When your client application has completed a SAML authentication flow where the end user has logged in using a web browser, a user session has been established in the web browser.
If the web browser used by your client application is a standard browser, there may be other applications relying on the same session, and you may be working in a single sign-on (SSO) environment. Applications attached to the same browser session may include other client applications and 10Duke Enterprise tools such as SysAdmin and OrgAdmin.
The end user may start a logout from any of these client applications, or from their profile page provided by the Login Application component, and expect to be logged out from all of them.
To support single logout, your client application needs to be able to start the logout, or log the user out when the logout has been started in another application. See instructions below.
Implementing SAML for your client application from scratch is difficult. There are plenty of libraries available, and we recommend that you find a library suitable for your client application to handle SAML for you.
Before you start
Make sure a logout callback URL has been defined for each of the client applications in SysAdmin.
Start the logout from your application
When the end user starts the logout from your client application, navigate the browser to the logout endpoint.
An example request (line breaks added for display purposes):
<BASE_URL>/user/saml20/signout
?SAMLRequest=fZFBT...
&RelayState=AnyRelayStateFromClient
&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1
&Signature=uw%2BEhZ...
Provide actual values in the request query parameters. In SAMLRequest
, provide an encoded SAML logout request (AuthnRequest
). In RelayState
, provide any value that you want to be sent back to your client application when authentication has been completed and 10Duke Enterprise sends a response back to your client application. In SigAlg
and Signature
, specify a cryptographic signature for the request.
When the end user has completed the logout in the browser, the browser is sent back to the client application’s (SP’s) logout callback URL.
When the user has been logged out, 10Duke Enterprise uses the browser to send a logout response back to the logout callback URL of your application.
An example response (line breaks added for display purposes):
POST /my-client-logout
Content-Type: application/x-www-form-urlencoded
SAMLResponse=PHNhb...
&RelayState=AnyRelayStateFromClient
From the SAMLResponse
parameter, your client application can read the SAML logout response. If you provided RelayState
in the request starting the logout, it’s echoed back to you here.
Handle this request as appropriate in your application. Typically this includes cleaning up the user session and displaying a “logout completed” page to the user.
Handle a logout started from another application
When the logout has been started from another application, 10Duke Enterprise submits a request from the browser to the logout callback URL of your application.
An example request (line breaks added for display purposes):
POST /my-client-logout
Content-Type: application/x-www-form-urlencoded
SAMLRequest=PHNhb...
&RelayState=RelayStateFrom10DukeEnterprise
From the SAMLResponse
parameter, your client application can read the SAML logout request. The request has a RelayState
parameter. It can contain any value, and your application only needs to pass it forward in the next step.
Handle this request as appropriate in your application. Typically this includes cleaning up the user session and redirecting back to 10Duke Enterprise.
Submit a request from the browser back to the 10Duke Enterprise logout endpoint.
An example request:
POST /user/saml20/signout
Content-Type: application/x-www-form-urlencoded
SAMLResponse=fVFda...
&RelayState=RelayStateFrom10DukeEnterprise
Return RelayState
exactly as you received it from 10Duke Enterprise, echoing back the same parameter value.
You have now handled your part of the logout process. When the whole logout process has been completed, the user is directed back to the application where the logout was started.