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
- Version:
- $Revision: 1 $
- Author:
- Bill Burke
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.keycloak.protocol.LoginProtocol
org.keycloak.protocol.LoginProtocol.Error -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.keycloak.protocol.saml.ArtifactResolverstatic final Stringstatic final Stringstatic final Stringprotected org.keycloak.events.EventBuilderprotected jakarta.ws.rs.core.HttpHeadersprotected static final org.jboss.logging.Loggerstatic final Stringprotected org.keycloak.models.RealmModelstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringprotected org.keycloak.models.KeycloakSessionprotected org.keycloak.models.SingleUseObjectProviderprotected jakarta.ws.rs.core.UriInfostatic final String -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionjakarta.ws.rs.core.Responseauthenticated(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.models.UserSessionModel userSession, org.keycloak.models.ClientSessionContext clientSessionCtx) jakarta.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 jakarta.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 jakarta.ws.rs.core.ResponsebuildAuthenticatedResponse(org.keycloak.models.AuthenticatedClientSessionModel clientSession, String redirectUri, Document samlDocument, JaxrsSAML2BindingBuilder bindingBuilder) protected jakarta.ws.rs.core.ResponsebuildErrorResponse(boolean isPostBinding, String destination, JaxrsSAML2BindingBuilder binding, Document document) protected jakarta.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 jakarta.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) jakarta.ws.rs.core.ResponsefinishBrowserLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.sessions.AuthenticationSessionModel logoutSession) jakarta.ws.rs.core.ResponsefrontchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession) org.keycloak.protocol.ClientDatagetClientData(org.keycloak.sessions.AuthenticationSessionModel authSession) static StringgetLogoutBindingTypeForClientSession(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.protected 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) 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) jakarta.ws.rs.core.ResponsesendError(org.keycloak.models.ClientModel client, org.keycloak.protocol.ClientData clientData, org.keycloak.protocol.LoginProtocol.Error error) jakarta.ws.rs.core.ResponsesendError(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.protocol.LoginProtocol.Error error, String errorMessage) setEventBuilder(org.keycloak.events.EventBuilder event) setHttpHeaders(jakarta.ws.rs.core.HttpHeaders headers) setRealm(org.keycloak.models.RealmModel realm) setSession(org.keycloak.models.KeycloakSession session) setUriInfo(jakarta.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) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.keycloak.protocol.LoginProtocol
authenticationComplete, sendPushRevocationPolicyRequest
-
Field Details
-
ATTRIBUTE_TRUE_VALUE
- See Also:
-
ATTRIBUTE_FALSE_VALUE
- See Also:
-
SAML_ASSERTION_CONSUMER_URL_POST_ATTRIBUTE
- See Also:
-
SAML_ASSERTION_CONSUMER_URL_REDIRECT_ATTRIBUTE
- See Also:
-
SAML_ASSERTION_CONSUMER_URL_ARTIFACT_ATTRIBUTE
- See Also:
-
SAML_SINGLE_LOGOUT_SERVICE_URL_POST_ATTRIBUTE
- See Also:
-
SAML_SINGLE_LOGOUT_SERVICE_URL_ARTIFACT_ATTRIBUTE
- See Also:
-
SAML_SINGLE_LOGOUT_SERVICE_URL_REDIRECT_ATTRIBUTE
- See Also:
-
SAML_SINGLE_LOGOUT_SERVICE_URL_SOAP_ATTRIBUTE
- See Also:
-
SAML_ARTIFACT_RESOLUTION_SERVICE_URL_ATTRIBUTE
- See Also:
-
LOGIN_PROTOCOL
- See Also:
-
SAML_BINDING
- See Also:
-
SAML_IDP_INITIATED_LOGIN
- See Also:
-
SAML_POST_BINDING
- See Also:
-
SAML_ARTIFACT_BINDING
- See Also:
-
SAML_SOAP_BINDING
- See Also:
-
SAML_REDIRECT_BINDING
- See Also:
-
SAML_REQUEST_ID
- See Also:
-
SAML_REQUEST_ID_BROKER
- See Also:
-
SAML_LOGOUT_BINDING
- See Also:
-
SAML_LOGOUT_ADD_EXTENSIONS_ELEMENT_WITH_KEY_INFO
- See Also:
-
SAML_SERVER_SIGNATURE_KEYINFO_KEY_NAME_TRANSFORMER
- See Also:
-
SAML_LOGOUT_REQUEST_ID
- See Also:
-
SAML_LOGOUT_RELAY_STATE
- See Also:
-
SAML_LOGOUT_CANONICALIZATION
- See Also:
-
SAML_LOGOUT_BINDING_URI
- See Also:
-
SAML_LOGOUT_SIGNATURE_ALGORITHM
- See Also:
-
SAML_NAME_ID
- See Also:
-
SAML_NAME_ID_FORMAT
- See Also:
-
SAML_DEFAULT_NAMEID_FORMAT
-
SAML_PERSISTENT_NAME_ID_FOR
- See Also:
-
SAML_IDP_INITIATED_SSO_RELAY_STATE
- See Also:
-
SAML_IDP_INITIATED_SSO_URL_NAME
- See Also:
-
SAML_LOGIN_REQUEST_FORCEAUTHN
- See Also:
-
SAML_FORCEAUTHN_REQUIREMENT
- See Also:
-
SAML_LOGOUT_INITIATOR_CLIENT_ID
- See Also:
-
USER_SESSION_ID
- See Also:
-
CLIENT_SESSION_ID
- See Also:
-
SAML_AUTHN_CONTEXT_CLASS_REF
- See Also:
-
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 jakarta.ws.rs.core.UriInfo uriInfo -
headers
protected jakarta.ws.rs.core.HttpHeaders headers -
event
protected org.keycloak.events.EventBuilder event -
artifactResolver
protected org.keycloak.protocol.saml.ArtifactResolver artifactResolver -
singleUseStore
protected org.keycloak.models.SingleUseObjectProvider singleUseStore
-
-
Constructor Details
-
SamlProtocol
public SamlProtocol()
-
-
Method Details
-
setSession
- Specified by:
setSessionin interfaceorg.keycloak.protocol.LoginProtocol
-
setRealm
- Specified by:
setRealmin interfaceorg.keycloak.protocol.LoginProtocol
-
setUriInfo
- Specified by:
setUriInfoin interfaceorg.keycloak.protocol.LoginProtocol
-
setHttpHeaders
- Specified by:
setHttpHeadersin interfaceorg.keycloak.protocol.LoginProtocol
-
setEventBuilder
- Specified by:
setEventBuilderin interfaceorg.keycloak.protocol.LoginProtocol
-
sendError
public jakarta.ws.rs.core.Response sendError(org.keycloak.sessions.AuthenticationSessionModel authSession, org.keycloak.protocol.LoginProtocol.Error error, String errorMessage) - Specified by:
sendErrorin interfaceorg.keycloak.protocol.LoginProtocol
-
getClientData
public org.keycloak.protocol.ClientData getClientData(org.keycloak.sessions.AuthenticationSessionModel authSession) - Specified by:
getClientDatain interfaceorg.keycloak.protocol.LoginProtocol
-
sendError
public jakarta.ws.rs.core.Response sendError(org.keycloak.models.ClientModel client, org.keycloak.protocol.ClientData clientData, org.keycloak.protocol.LoginProtocol.Error error) - Specified by:
sendErrorin interfaceorg.keycloak.protocol.LoginProtocol
-
buildErrorResponse
protected jakarta.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
-
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) -
getLogoutBindingTypeForClientSession
public static String getLogoutBindingTypeForClientSession(org.keycloak.models.AuthenticatedClientSessionModel clientSession) -
getNameIdFormat
protected String getNameIdFormat(SamlClient samlClient, org.keycloak.sessions.AuthenticationSessionModel authSession) -
getNameId
-
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 jakarta.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 jakarta.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
-
useArtifactForLogout
public static boolean useArtifactForLogout(org.keycloak.models.ClientModel client) -
frontchannelLogout
public jakarta.ws.rs.core.Response frontchannelLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.models.AuthenticatedClientSessionModel clientSession) - Specified by:
frontchannelLogoutin interfaceorg.keycloak.protocol.LoginProtocol
-
finishBrowserLogout
public jakarta.ws.rs.core.Response finishBrowserLogout(org.keycloak.models.UserSessionModel userSession, org.keycloak.sessions.AuthenticationSessionModel logoutSession) - Specified by:
finishBrowserLogoutin interfaceorg.keycloak.protocol.LoginProtocol
-
buildLogoutResponse
protected jakarta.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 jakarta.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 jakarta.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.ConfigurationException This 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 jakarta.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.ConfigurationException This 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
-