Class PopulateBindingAndEndpointContexts
- All Implemented Interfaces:
Component
,DestructableComponent
,InitializableComponent
,ProfileAction
,Aware
,MessageSource
,MessageSourceAware
,Action
public class PopulateBindingAndEndpointContexts extends AbstractProfileAction
SAMLBindingContext
and when appropriate the
SAMLEndpointContext
based on the inbound request.
If the inbound binding is found in the set of supported bindings, and it is "synchronous", then there is no endpoint (the response is sent directly back to the requester), and an endpoint context is not created. A binding context is created based on the inbound binding.
Otherwise, the endpoint context is populated by constructing a "template" endpoint,
with content based on the inbound request, and relying on an injected EndpointResolver
and an injected list of acceptable bindings.
The binding context is populated based on the computed endpoint's binding, and the
inbound SAMLBindingContext
's relay state.
If the outbound binding is an artifact-based binding, then the action also creates
a SAMLArtifactContext
populated by settings from the SAMLArtifactConfiguration
.
-
Field Summary
Fields Modifier and Type Field Description private SAMLArtifactConfiguration
artifactConfiguration
Artifact configuration.private Function<ProfileRequestContext,SAMLArtifactContext>
artifactContextLookupStrategy
Strategy function for access toSAMLArtifactContext
to populate.private boolean
artifactImpliesSecureChannel
Whether an artifact-based binding implies the use of a secure channel.private Function<ProfileRequestContext,SAMLBindingContext>
bindingContextLookupStrategy
Strategy function for access toSAMLBindingContext
to populate.private List<BindingDescriptor>
bindingDescriptors
List of possible bindings, in preference order.private Function<ProfileRequestContext,List<BindingDescriptor>>
bindingDescriptorsLookupStrategy
Lookup strategy for bindings.private XMLObjectBuilder<?>
endpointBuilder
Builder for template endpoints.private Function<ProfileRequestContext,SAMLEndpointContext>
endpointContextLookupStrategy
Strategy function for access toSAMLEndpointContext
to populate.private EndpointResolver<?>
endpointResolver
Endpoint resolver.private QName
endpointType
The type of endpoint to resolve.private Object
inboundMessage
Optional inbound message.private org.slf4j.Logger
log
Class logger.private SAMLMetadataContext
mdContext
Optional metadata for use in endpoint derivation/validation.private Function<ProfileRequestContext,SAMLMetadataContext>
metadataContextLookupStrategy
Strategy function for access toSAMLMetadataContext
for input to resolver.private Function<ProfileRequestContext,RelyingPartyContext>
relyingPartyContextLookupStrategy
Strategy function for access toRelyingPartyContext
.private String
relyingPartyId
Optional RP name for logging.private boolean
skipValidationSinceSigned
Whether to bypass endpoint validation because message is signed.private boolean
verified
Is the relying party "verified" in SAML terms? -
Constructor Summary
Constructors Constructor Description PopulateBindingAndEndpointContexts()
Constructor. -
Method Summary
Modifier and Type Method Description private EndpointCriterion<?>
buildEndpointCriterion(String unverifiedBinding)
Build a template Endpoint object to use as input criteria to the resolution process and wrap it in a criterion object.protected void
doExecute(ProfileRequestContext profileRequestContext)
protected void
doInitialize()
protected boolean
doPreExecute(ProfileRequestContext profileRequestContext)
private boolean
handleSynchronousRequest(ProfileRequestContext profileRequestContext)
Check for an inbound request binding that is synchronous and handle appropriately.void
setArtifactContextLookupStrategy(Function<ProfileRequestContext,SAMLArtifactContext> strategy)
Set lookup strategy forSAMLArtifactContext
to populate.void
setArtifactImpliesSecureChannel(boolean flag)
Set whether an artifact-based binding implies that the eventual channel for SAML message exchange will be secured, overriding the integrity and confidentiality properties of the current channel.void
setBindingContextLookupStrategy(Function<ProfileRequestContext,SAMLBindingContext> strategy)
Set lookup strategy forSAMLBindingContext
to populate.void
setBindingDescriptorsLookupStrategy(Function<ProfileRequestContext,List<BindingDescriptor>> strategy)
Set lookup strategy to return the bindings to evaluate for use, in preference order.void
setEndpointContextLookupStrategy(Function<ProfileRequestContext,SAMLEndpointContext> strategy)
Set lookup strategy forSAMLEndpointContext
to populate.void
setEndpointResolver(EndpointResolver<?> resolver)
Set a customEndpointResolver
to use.void
setEndpointType(QName type)
Set the type of endpoint to resolve, defaults to<AssertionConsumerService>
.void
setMetadataContextLookupStrategy(Function<ProfileRequestContext,SAMLMetadataContext> strategy)
Set lookup strategy forSAMLMetadataContext
for input to resolution.void
setRelyingPartyContextLookupStrategy(Function<ProfileRequestContext,RelyingPartyContext> strategy)
Set lookup strategy forRelyingPartyContext
.Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction
doExecute, execute, getMessage, getMessage, getMessage, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy
Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction
getActivationCondition, setActivationCondition
Methods inherited from class org.opensaml.profile.action.AbstractProfileAction
doPostExecute, doPostExecute, execute, getHttpServletRequest, getHttpServletResponse, getLogPrefix, setHttpServletRequest, setHttpServletResponse
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, doDestroy, initialize, isDestroyed, isInitialized
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface net.shibboleth.utilities.java.support.component.InitializableComponent
initialize, isInitialized
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
endpointType
The type of endpoint to resolve. -
endpointResolver
Endpoint resolver. -
bindingDescriptorsLookupStrategy
@Nonnull private Function<ProfileRequestContext,List<BindingDescriptor>> bindingDescriptorsLookupStrategyLookup strategy for bindings. -
relyingPartyContextLookupStrategy
@Nonnull private Function<ProfileRequestContext,RelyingPartyContext> relyingPartyContextLookupStrategyStrategy function for access toRelyingPartyContext
. -
metadataContextLookupStrategy
Strategy function for access toSAMLMetadataContext
for input to resolver. -
bindingContextLookupStrategy
Strategy function for access toSAMLBindingContext
to populate. -
endpointContextLookupStrategy
Strategy function for access toSAMLEndpointContext
to populate. -
artifactContextLookupStrategy
Strategy function for access toSAMLArtifactContext
to populate. -
bindingDescriptors
List of possible bindings, in preference order. -
artifactImpliesSecureChannel
private boolean artifactImpliesSecureChannelWhether an artifact-based binding implies the use of a secure channel. -
endpointBuilder
Builder for template endpoints. -
artifactConfiguration
Artifact configuration. -
inboundMessage
Optional inbound message. -
relyingPartyId
Optional RP name for logging. -
mdContext
Optional metadata for use in endpoint derivation/validation. -
verified
private boolean verifiedIs the relying party "verified" in SAML terms? -
skipValidationSinceSigned
private boolean skipValidationSinceSignedWhether to bypass endpoint validation because message is signed.
-
-
Constructor Details
-
PopulateBindingAndEndpointContexts
public PopulateBindingAndEndpointContexts()Constructor.
-
-
Method Details
-
setEndpointType
Set the type of endpoint to resolve, defaults to<AssertionConsumerService>
.- Parameters:
type
- type of endpoint to resolve
-
setEndpointResolver
Set a customEndpointResolver
to use.- Parameters:
resolver
- endpoint resolver to use
-
setBindingDescriptorsLookupStrategy
public void setBindingDescriptorsLookupStrategy(@Nonnull Function<ProfileRequestContext,List<BindingDescriptor>> strategy)Set lookup strategy to return the bindings to evaluate for use, in preference order.- Parameters:
strategy
- lookup strategy- Since:
- 4.0.0
-
setRelyingPartyContextLookupStrategy
public void setRelyingPartyContextLookupStrategy(@Nonnull Function<ProfileRequestContext,RelyingPartyContext> strategy)Set lookup strategy forRelyingPartyContext
.- Parameters:
strategy
- lookup strategy
-
setMetadataContextLookupStrategy
public void setMetadataContextLookupStrategy(@Nonnull Function<ProfileRequestContext,SAMLMetadataContext> strategy)Set lookup strategy forSAMLMetadataContext
for input to resolution.- Parameters:
strategy
- lookup strategy
-
setBindingContextLookupStrategy
public void setBindingContextLookupStrategy(@Nonnull Function<ProfileRequestContext,SAMLBindingContext> strategy)Set lookup strategy forSAMLBindingContext
to populate.- Parameters:
strategy
- lookup strategy
-
setEndpointContextLookupStrategy
public void setEndpointContextLookupStrategy(@Nonnull Function<ProfileRequestContext,SAMLEndpointContext> strategy)Set lookup strategy forSAMLEndpointContext
to populate.- Parameters:
strategy
- lookup strategy
-
setArtifactContextLookupStrategy
public void setArtifactContextLookupStrategy(@Nonnull Function<ProfileRequestContext,SAMLArtifactContext> strategy)Set lookup strategy forSAMLArtifactContext
to populate.- Parameters:
strategy
- lookup strategy
-
setArtifactImpliesSecureChannel
public void setArtifactImpliesSecureChannel(boolean flag)Set whether an artifact-based binding implies that the eventual channel for SAML message exchange will be secured, overriding the integrity and confidentiality properties of the current channel.This has the effect of suppressing signing and encryption when an artifact binding is used, which is normally desirable.
Defaults to true.
- Parameters:
flag
- flag to set
-
doInitialize
- Overrides:
doInitialize
in classAbstractInitializableComponent
- Throws:
ComponentInitializationException
-
doPreExecute
- Overrides:
doPreExecute
in classAbstractConditionalProfileAction
-
doExecute
- Overrides:
doExecute
in classAbstractProfileAction
-
handleSynchronousRequest
Check for an inbound request binding that is synchronous and handle appropriately.- Parameters:
profileRequestContext
- profile request context- Returns:
- true iff a synchronous binding was handled
-
buildEndpointCriterion
@Nonnull private EndpointCriterion<?> buildEndpointCriterion(@Nonnull @NotEmpty String unverifiedBinding)Build a template Endpoint object to use as input criteria to the resolution process and wrap it in a criterion object.- Parameters:
unverifiedBinding
- default binding to use for an unverified requester with no Binding specified- Returns:
- criterion to give to resolver
-