Package org.keycloak.protocol.saml
Class SamlProtocol
- java.lang.Object
-
- org.keycloak.protocol.saml.SamlProtocol
-
- All Implemented Interfaces:
org.keycloak.protocol.LoginProtocol,org.keycloak.provider.Provider
- Direct Known Subclasses:
TokenEndpoint.TokenExchangeSamlProtocol
public class SamlProtocol extends Object implements org.keycloak.protocol.LoginProtocol
- Version:
- $Revision: 1 $
- Author:
- Bill Burke
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classSamlProtocol.ProtocolMapperProcessor<T>
-
Field Summary
-
Constructor Summary
Constructors Constructor Description SamlProtocol()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description javax.ws.rs.core.Responseauthenticated(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx)javax.ws.rs.core.ResponsebackchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)protected StringbuildArtifactAndStoreResponse(org.keycloak.dom.saml.v2.SAML2Object saml2Object, org.keycloak.models.AuthenticatedClientSessionModel clientSessionModel)protected StringbuildArtifactAndStoreResponse(org.keycloak.dom.saml.v2.SAML2Object statusResponseType, org.keycloak.models.UserSessionModel userSession)protected javax.ws.rs.core.ResponsebuildArtifactAuthenticatedResponse(org.keycloak.models.AuthenticatedClientSessionModel clientSession, String redirectUri, org.keycloak.dom.saml.v2.SAML2Object samlDocument, JaxrsSAML2BindingBuilder bindingBuilder)This method, instead of sending the actual response with the token sends the artifact message via post or redirect.protected javax.ws.rs.core.ResponsebuildAuthenticatedResponse(org.keycloak.models.AuthenticatedClientSessionModel clientSession, String redirectUri, Document samlDocument, JaxrsSAML2BindingBuilder bindingBuilder)protected javax.ws.rs.core.ResponsebuildErrorResponse(boolean isPostBinding, String destination, JaxrsSAML2BindingBuilder binding, Document document)protected javax.ws.rs.core.ResponsebuildLogoutArtifactResponse(org.keycloak.models.UserSessionModel userSession, String redirectUri, org.keycloak.dom.saml.v2.protocol.StatusResponseType statusResponseType, JaxrsSAML2BindingBuilder bindingBuilder)This method, instead of sending the actual response with the token, sends the artifact message via post or redirect.protected javax.ws.rs.core.ResponsebuildLogoutResponse(org.keycloak.models.UserSessionModel userSession, String logoutBindingUri, org.keycloak.saml.SAML2LogoutResponseBuilder builder, JaxrsSAML2BindingBuilder binding)voidclose()protected org.keycloak.dom.saml.v2.protocol.LogoutRequestTypecreateLogoutRequest(String logoutUrl, org.keycloak.models.AuthenticatedClientSessionModel clientSession, org.keycloak.models.ClientModel client, org.keycloak.saml.SamlProtocolExtensionsAwareBuilder.NodeGenerator... extensions)javax.ws.rs.core.ResponsefinishLogout(org.keycloak.models.UserSessionModel userSession)javax.ws.rs.core.ResponsefrontchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)static StringgetLogoutServiceUrl(org.keycloak.models.KeycloakSession session, org.keycloak.models.ClientModel client, String bindingType, boolean backChannelLogout)protected StringgetNameId(String nameIdFormat, org.keycloak.sessions.CommonClientSessionModel clientSession, org.keycloak.models.UserSessionModel userSession)protected StringgetNameIdFormat(SamlClient samlClient, org.keycloak.sessions.AuthenticationSessionModel authSession)protected StringgetPersistentNameId(org.keycloak.sessions.CommonClientSessionModel clientSession, org.keycloak.models.UserSessionModel userSession)Attempts to retrieve the persistent type NameId as follows: saml.persistent.name.id.for.$clientId user attribute saml.persistent.name.id.for.* user attribute G-$randomUuidprotected StringgetResponseIssuer(org.keycloak.models.RealmModel realm)protected StringgetSAMLNameId(List<SamlProtocol.ProtocolMapperProcessor<SAMLNameIdMapper>> samlNameIdMappers, String nameIdFormat, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)protected booleanisLogoutPostBindingForClient(org.keycloak.models.AuthenticatedClientSessionModel clientSession)static booleanisLogoutPostBindingForInitiator(org.keycloak.models.UserSessionModel session)protected booleanisPostBinding(org.keycloak.models.AuthenticatedClientSessionModel clientSession)protected booleanisPostBinding(org.keycloak.sessions.AuthenticationSessionModel authSession)org.keycloak.dom.saml.v2.assertion.AttributeStatementTypepopulateAttributeStatements(List<SamlProtocol.ProtocolMapperProcessor<SAMLAttributeStatementMapper>> attributeStatementMappers, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)voidpopulateRoles(SamlProtocol.ProtocolMapperProcessor<SAMLRoleListMapper> roleListMapper, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx, org.keycloak.dom.saml.v2.assertion.AttributeStatementType existingAttributeStatement)booleanrequireReauthentication(org.keycloak.models.UserSessionModel userSession, org.keycloak.sessions.AuthenticationSessionModel authSession)javax.ws.rs.core.ResponsesendError(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.protocol.LoginProtocol.Error error)SamlProtocolsetEventBuilder(org.keycloak.events.EventBuilder event)SamlProtocolsetHttpHeaders(javax.ws.rs.core.HttpHeaders headers)SamlProtocolsetRealm(org.keycloak.models.RealmModel realm)SamlProtocolsetSession(org.keycloak.models.KeycloakSession session)SamlProtocolsetUriInfo(javax.ws.rs.core.UriInfo uriInfo)org.keycloak.dom.saml.v2.protocol.ResponseTypetransformLoginResponse(List<SamlProtocol.ProtocolMapperProcessor<SAMLLoginResponseMapper>> mappers, org.keycloak.dom.saml.v2.protocol.ResponseType response, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx)static booleanuseArtifactForLogout(org.keycloak.models.ClientModel client)
-
-
-
Field Detail
-
ATTRIBUTE_TRUE_VALUE
public static final String ATTRIBUTE_TRUE_VALUE
- See Also:
- Constant Field Values
-
ATTRIBUTE_FALSE_VALUE
public static final String ATTRIBUTE_FALSE_VALUE
- See Also:
- Constant Field Values
-
SAML_ASSERTION_CONSUMER_URL_POST_ATTRIBUTE
public static final String SAML_ASSERTION_CONSUMER_URL_POST_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_ASSERTION_CONSUMER_URL_REDIRECT_ATTRIBUTE
public static final String SAML_ASSERTION_CONSUMER_URL_REDIRECT_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_ASSERTION_CONSUMER_URL_ARTIFACT_ATTRIBUTE
public static final String SAML_ASSERTION_CONSUMER_URL_ARTIFACT_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_SINGLE_LOGOUT_SERVICE_URL_POST_ATTRIBUTE
public static final String SAML_SINGLE_LOGOUT_SERVICE_URL_POST_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_SINGLE_LOGOUT_SERVICE_URL_ARTIFACT_ATTRIBUTE
public static final String SAML_SINGLE_LOGOUT_SERVICE_URL_ARTIFACT_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_SINGLE_LOGOUT_SERVICE_URL_REDIRECT_ATTRIBUTE
public static final String SAML_SINGLE_LOGOUT_SERVICE_URL_REDIRECT_ATTRIBUTE
- See Also:
- Constant Field Values
-
SAML_ARTIFACT_RESOLUTION_SERVICE_URL_ATTRIBUTE
public static final String SAML_ARTIFACT_RESOLUTION_SERVICE_URL_ATTRIBUTE
- See Also:
- Constant Field Values
-
LOGIN_PROTOCOL
public static final String LOGIN_PROTOCOL
- See Also:
- Constant Field Values
-
SAML_BINDING
public static final String SAML_BINDING
- See Also:
- Constant Field Values
-
SAML_IDP_INITIATED_LOGIN
public static final String SAML_IDP_INITIATED_LOGIN
- See Also:
- Constant Field Values
-
SAML_POST_BINDING
public static final String SAML_POST_BINDING
- See Also:
- Constant Field Values
-
SAML_SOAP_BINDING
public static final String SAML_SOAP_BINDING
- See Also:
- Constant Field Values
-
SAML_REDIRECT_BINDING
public static final String SAML_REDIRECT_BINDING
- See Also:
- Constant Field Values
-
SAML_REQUEST_ID
public static final String SAML_REQUEST_ID
- See Also:
- Constant Field Values
-
SAML_REQUEST_ID_BROKER
public static final String SAML_REQUEST_ID_BROKER
- See Also:
- Constant Field Values
-
SAML_LOGOUT_BINDING
public static final String SAML_LOGOUT_BINDING
- See Also:
- Constant Field Values
-
SAML_LOGOUT_ADD_EXTENSIONS_ELEMENT_WITH_KEY_INFO
public static final String SAML_LOGOUT_ADD_EXTENSIONS_ELEMENT_WITH_KEY_INFO
- See Also:
- Constant Field Values
-
SAML_SERVER_SIGNATURE_KEYINFO_KEY_NAME_TRANSFORMER
public static final String SAML_SERVER_SIGNATURE_KEYINFO_KEY_NAME_TRANSFORMER
- See Also:
- Constant Field Values
-
SAML_LOGOUT_REQUEST_ID
public static final String SAML_LOGOUT_REQUEST_ID
- See Also:
- Constant Field Values
-
SAML_LOGOUT_RELAY_STATE
public static final String SAML_LOGOUT_RELAY_STATE
- See Also:
- Constant Field Values
-
SAML_LOGOUT_CANONICALIZATION
public static final String SAML_LOGOUT_CANONICALIZATION
- See Also:
- Constant Field Values
-
SAML_LOGOUT_BINDING_URI
public static final String SAML_LOGOUT_BINDING_URI
- See Also:
- Constant Field Values
-
SAML_LOGOUT_SIGNATURE_ALGORITHM
public static final String SAML_LOGOUT_SIGNATURE_ALGORITHM
- See Also:
- Constant Field Values
-
SAML_NAME_ID
public static final String SAML_NAME_ID
- See Also:
- Constant Field Values
-
SAML_NAME_ID_FORMAT
public static final String SAML_NAME_ID_FORMAT
- See Also:
- Constant Field Values
-
SAML_DEFAULT_NAMEID_FORMAT
public static final String SAML_DEFAULT_NAMEID_FORMAT
-
SAML_PERSISTENT_NAME_ID_FOR
public static final String SAML_PERSISTENT_NAME_ID_FOR
- See Also:
- Constant Field Values
-
SAML_IDP_INITIATED_SSO_RELAY_STATE
public static final String SAML_IDP_INITIATED_SSO_RELAY_STATE
- See Also:
- Constant Field Values
-
SAML_IDP_INITIATED_SSO_URL_NAME
public static final String SAML_IDP_INITIATED_SSO_URL_NAME
- See Also:
- Constant Field Values
-
SAML_LOGIN_REQUEST_FORCEAUTHN
public static final String SAML_LOGIN_REQUEST_FORCEAUTHN
- See Also:
- Constant Field Values
-
SAML_FORCEAUTHN_REQUIREMENT
public static final String SAML_FORCEAUTHN_REQUIREMENT
- See Also:
- Constant Field Values
-
SAML_LOGOUT_INITIATOR_CLIENT_ID
public static final String SAML_LOGOUT_INITIATOR_CLIENT_ID
- See Also:
- Constant Field Values
-
logger
protected static final org.jboss.logging.Logger logger
-
session
protected org.keycloak.models.KeycloakSession session
-
realm
protected org.keycloak.models.RealmModel realm
-
uriInfo
protected javax.ws.rs.core.UriInfo uriInfo
-
headers
protected javax.ws.rs.core.HttpHeaders headers
-
event
protected org.keycloak.events.EventBuilder event
-
artifactResolver
protected org.keycloak.protocol.saml.ArtifactResolver artifactResolver
-
artifactSessionMappingStore
protected org.keycloak.models.SamlArtifactSessionMappingStoreProvider artifactSessionMappingStore
-
-
Method Detail
-
setSession
public SamlProtocol setSession(org.keycloak.models.KeycloakSession session)
- Specified by:
setSessionin interfaceorg.keycloak.protocol.LoginProtocol
-
setRealm
public SamlProtocol setRealm(org.keycloak.models.RealmModel realm)
- Specified by:
setRealmin interfaceorg.keycloak.protocol.LoginProtocol
-
setUriInfo
public SamlProtocol setUriInfo(javax.ws.rs.core.UriInfo uriInfo)
- Specified by:
setUriInfoin interfaceorg.keycloak.protocol.LoginProtocol
-
setHttpHeaders
public SamlProtocol setHttpHeaders(javax.ws.rs.core.HttpHeaders headers)
- Specified by:
setHttpHeadersin interfaceorg.keycloak.protocol.LoginProtocol
-
setEventBuilder
public SamlProtocol setEventBuilder(org.keycloak.events.EventBuilder event)
- Specified by:
setEventBuilderin interfaceorg.keycloak.protocol.LoginProtocol
-
sendError
public javax.ws.rs.core.Response sendError(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.protocol.LoginProtocol.Error error)- Specified by:
sendErrorin interfaceorg.keycloak.protocol.LoginProtocol
-
buildErrorResponse
protected javax.ws.rs.core.Response buildErrorResponse(boolean isPostBinding, String destination, JaxrsSAML2BindingBuilder binding, Document document) throws org.keycloak.saml.common.exceptions.ConfigurationException, org.keycloak.saml.common.exceptions.ProcessingException, IOException- Throws:
org.keycloak.saml.common.exceptions.ConfigurationExceptionorg.keycloak.saml.common.exceptions.ProcessingExceptionIOException
-
getResponseIssuer
protected String getResponseIssuer(org.keycloak.models.RealmModel realm)
-
isPostBinding
protected boolean isPostBinding(org.keycloak.sessions.AuthenticationSessionModel authSession)
-
isPostBinding
protected boolean isPostBinding(org.keycloak.models.AuthenticatedClientSessionModel clientSession)
-
isLogoutPostBindingForInitiator
public static boolean isLogoutPostBindingForInitiator(org.keycloak.models.UserSessionModel session)
-
isLogoutPostBindingForClient
protected boolean isLogoutPostBindingForClient(org.keycloak.models.AuthenticatedClientSessionModel clientSession)
-
getNameIdFormat
protected String getNameIdFormat(SamlClient samlClient, org.keycloak.sessions.AuthenticationSessionModel authSession)
-
getNameId
protected String getNameId(String nameIdFormat, org.keycloak.sessions.CommonClientSessionModel clientSession, org.keycloak.models.UserSessionModel userSession)
-
getPersistentNameId
protected String getPersistentNameId(org.keycloak.sessions.CommonClientSessionModel clientSession, org.keycloak.models.UserSessionModel userSession)
Attempts to retrieve the persistent type NameId as follows:- saml.persistent.name.id.for.$clientId user attribute
- saml.persistent.name.id.for.* user attribute
- G-$randomUuid
If a randomUuid is generated, an attribute for the given saml.persistent.name.id.for.$clientId will be generated, otherwise no state change will occur with respect to the user's attributes.
- Returns:
- the user's persistent NameId
-
authenticated
public javax.ws.rs.core.Response authenticated(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx)- Specified by:
authenticatedin interfaceorg.keycloak.protocol.LoginProtocol
-
buildAuthenticatedResponse
protected javax.ws.rs.core.Response buildAuthenticatedResponse(org.keycloak.models.AuthenticatedClientSessionModel clientSession, String redirectUri, Document samlDocument, JaxrsSAML2BindingBuilder bindingBuilder) throws org.keycloak.saml.common.exceptions.ConfigurationException, org.keycloak.saml.common.exceptions.ProcessingException, IOException- Throws:
org.keycloak.saml.common.exceptions.ConfigurationExceptionorg.keycloak.saml.common.exceptions.ProcessingExceptionIOException
-
populateAttributeStatements
public org.keycloak.dom.saml.v2.assertion.AttributeStatementType populateAttributeStatements(List<SamlProtocol.ProtocolMapperProcessor<SAMLAttributeStatementMapper>> attributeStatementMappers, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)
-
transformLoginResponse
public org.keycloak.dom.saml.v2.protocol.ResponseType transformLoginResponse(List<SamlProtocol.ProtocolMapperProcessor<SAMLLoginResponseMapper>> mappers, org.keycloak.dom.saml.v2.protocol.ResponseType response, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx)
-
populateRoles
public void populateRoles(SamlProtocol.ProtocolMapperProcessor<SAMLRoleListMapper> roleListMapper, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx, org.keycloak.dom.saml.v2.assertion.AttributeStatementType existingAttributeStatement)
-
getSAMLNameId
protected String getSAMLNameId(List<SamlProtocol.ProtocolMapperProcessor<SAMLNameIdMapper>> samlNameIdMappers, String nameIdFormat, org.keycloak.models.KeycloakSession session, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)
-
getLogoutServiceUrl
public static String getLogoutServiceUrl(org.keycloak.models.KeycloakSession session, org.keycloak.models.ClientModel client, String bindingType, boolean backChannelLogout)
-
useArtifactForLogout
public static boolean useArtifactForLogout(org.keycloak.models.ClientModel client)
-
frontchannelLogout
public javax.ws.rs.core.Response frontchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)- Specified by:
frontchannelLogoutin interfaceorg.keycloak.protocol.LoginProtocol
-
finishLogout
public javax.ws.rs.core.Response finishLogout(org.keycloak.models.UserSessionModel userSession)
- Specified by:
finishLogoutin interfaceorg.keycloak.protocol.LoginProtocol
-
buildLogoutResponse
protected javax.ws.rs.core.Response buildLogoutResponse(org.keycloak.models.UserSessionModel userSession, String logoutBindingUri, org.keycloak.saml.SAML2LogoutResponseBuilder builder, JaxrsSAML2BindingBuilder binding) throws org.keycloak.saml.common.exceptions.ConfigurationException, org.keycloak.saml.common.exceptions.ProcessingException, IOException- Throws:
org.keycloak.saml.common.exceptions.ConfigurationExceptionorg.keycloak.saml.common.exceptions.ProcessingExceptionIOException
-
backchannelLogout
public javax.ws.rs.core.Response backchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession)- Specified by:
backchannelLogoutin interfaceorg.keycloak.protocol.LoginProtocol
-
createLogoutRequest
protected org.keycloak.dom.saml.v2.protocol.LogoutRequestType createLogoutRequest(String logoutUrl, org.keycloak.models.AuthenticatedClientSessionModel clientSession, org.keycloak.models.ClientModel client, org.keycloak.saml.SamlProtocolExtensionsAwareBuilder.NodeGenerator... extensions) throws org.keycloak.saml.common.exceptions.ConfigurationException
- Throws:
org.keycloak.saml.common.exceptions.ConfigurationException
-
requireReauthentication
public boolean requireReauthentication(org.keycloak.models.UserSessionModel userSession, org.keycloak.sessions.AuthenticationSessionModel authSession)- Specified by:
requireReauthenticationin interfaceorg.keycloak.protocol.LoginProtocol
-
close
public void close()
- Specified by:
closein interfaceorg.keycloak.provider.Provider
-
buildArtifactAuthenticatedResponse
protected javax.ws.rs.core.Response buildArtifactAuthenticatedResponse(org.keycloak.models.AuthenticatedClientSessionModel clientSession, String redirectUri, org.keycloak.dom.saml.v2.SAML2Object samlDocument, JaxrsSAML2BindingBuilder bindingBuilder) throws org.keycloak.saml.common.exceptions.ProcessingException, org.keycloak.saml.common.exceptions.ConfigurationExceptionThis method, instead of sending the actual response with the token sends the artifact message via post or redirect.- Parameters:
clientSession- the current authenticated client sessionredirectUri- the redirect uri to the clientsamlDocument- a Document containing the saml ResponsebindingBuilder- the current JaxrsSAML2BindingBuilder configured with information for signing and encryption- Returns:
- A response (POSTed form or redirect) with a newly generated artifact
- Throws:
org.keycloak.saml.common.exceptions.ConfigurationExceptionorg.keycloak.saml.common.exceptions.ProcessingExceptionIOException
-
buildLogoutArtifactResponse
protected javax.ws.rs.core.Response buildLogoutArtifactResponse(org.keycloak.models.UserSessionModel userSession, String redirectUri, org.keycloak.dom.saml.v2.protocol.StatusResponseType statusResponseType, JaxrsSAML2BindingBuilder bindingBuilder) throws org.keycloak.saml.common.exceptions.ProcessingException, org.keycloak.saml.common.exceptions.ConfigurationExceptionThis method, instead of sending the actual response with the token, sends the artifact message via post or redirect. This method is only to be used for the final LogoutResponse.- Parameters:
userSession- The current user session being logged outredirectUri- the redirect uri to the clientstatusResponseType- a Document containing the saml ResponsebindingBuilder- the current JaxrsSAML2BindingBuilder configured with information for signing and encryption- Returns:
- A response (POSTed form or redirect) with a newly generated artifact
- Throws:
org.keycloak.saml.common.exceptions.ProcessingExceptionIOExceptionorg.keycloak.saml.common.exceptions.ConfigurationException
-
buildArtifactAndStoreResponse
protected String buildArtifactAndStoreResponse(org.keycloak.dom.saml.v2.SAML2Object statusResponseType, org.keycloak.models.UserSessionModel userSession) throws org.keycloak.protocol.saml.ArtifactResolverProcessingException, org.keycloak.saml.common.exceptions.ConfigurationException, org.keycloak.saml.common.exceptions.ProcessingException
- Throws:
org.keycloak.protocol.saml.ArtifactResolverProcessingExceptionorg.keycloak.saml.common.exceptions.ConfigurationExceptionorg.keycloak.saml.common.exceptions.ProcessingException
-
buildArtifactAndStoreResponse
protected String buildArtifactAndStoreResponse(org.keycloak.dom.saml.v2.SAML2Object saml2Object, org.keycloak.models.AuthenticatedClientSessionModel clientSessionModel) throws org.keycloak.protocol.saml.ArtifactResolverProcessingException, org.keycloak.saml.common.exceptions.ProcessingException, org.keycloak.saml.common.exceptions.ConfigurationException
- Throws:
org.keycloak.protocol.saml.ArtifactResolverProcessingExceptionorg.keycloak.saml.common.exceptions.ProcessingExceptionorg.keycloak.saml.common.exceptions.ConfigurationException
-
-