Class HTTPArtifactDecoder
java.lang.Object
net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
org.opensaml.messaging.decoder.AbstractMessageDecoder
org.opensaml.messaging.decoder.servlet.AbstractHttpServletRequestMessageDecoder
org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder
org.opensaml.saml.saml2.binding.decoding.impl.HTTPArtifactDecoder
- All Implemented Interfaces:
Component
,DestructableComponent
,InitializableComponent
,UnmodifiableComponent
,MessageDecoder
,HttpServletRequestMessageDecoder
,SAMLMessageDecoder
public class HTTPArtifactDecoder
extends BaseHttpServletRequestXMLMessageDecoder
implements SAMLMessageDecoder
SAML 2 Artifact Binding decoder, support both HTTP GET and POST.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate SAML2ArtifactBuilderFactory
SAML 2 artifact builder factory.Resolver for ArtifactResolutionService endpoints.private BindingDescriptor
OptionalBindingDescriptor
to inject intoSAMLBindingContext
created.private IdentifierGenerationStrategy
Identifier generation strategy.private final org.slf4j.Logger
Class logger.private QName
The peer entity role QName.private RoleDescriptorResolver
Role descriptor resolver.private Resolver<String,
CriteriaSet> Resolver for the self entityID, based on the peer entity data.private SOAPClient
SOAP client.private String
SOAP client security configuration profile ID.private String
The SOAP client message pipeline name. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate ArtifactResolve
buildArtifactResolveRequestMessage
(SAML2Artifact artifact, String endpoint, RoleDescriptor peerRoleDescriptor, String selfEntityID) Build the SAML protocol message for artifact resolution.private Issuer
buildIssuer
(String selfEntityID) Build the SAML protocol message Issuer element.private SAMLObject
dereferenceArtifact
(SAML2Artifact artifact, RoleDescriptor peerRoleDescriptor, ArtifactResolutionService ars) De-reference the supplied artifact into the corresponding SAML protocol message.protected void
doDecode()
Performs the decoding logic.protected void
protected void
Get the SAML 2 artifact builder factory.Get the artifact endpoint resolver.Get an optionalBindingDescriptor
to inject intoSAMLBindingContext
created.Gets the SAML binding URI supported by this decoder.Get the identifier generation strategy.Get the peer entity roleQName
.Get the role descriptor resolver.Get the resolver for the self entityID.Get the SOAP client instance.Get the SOAP client security configuration profile ID to use.Get the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient
.private SAML2Artifact
parseArtifact
(String encodedArtifact) Parse and decode the supplied encoded artifact string into aSAML2Artifact
instance.protected void
populateBindingContext
(MessageContext messageContext) Populate the context which carries information specific to this binding.private void
processArtifact
(MessageContext messageContext, javax.servlet.http.HttpServletRequest request) Process the incoming artifact by decoding the artifacts, dereferencing it from the artifact issuer and storing the resulting protocol message in the message context.private ArtifactResolutionService
resolveArtifactEndpoint
(SAML2Artifact artifact, RoleDescriptor peerRoleDescriptor) Resolve the artifact resolution endpoint of the peer who issued the artifact.private RoleDescriptor
resolvePeerRoleDescriptor
(SAML2Artifact artifact) Resolve the role descriptor of the SAML peer who issued the supplied artifact.private String
resolveSelfEntityID
(RoleDescriptor peerRoleDescriptor) Resolve the self entityID, used as the issuer of the protocol message by this entity.void
Set the SAML 2 artifact builder factory.void
Set the artifact endpoint resolver.void
setBindingDescriptor
(BindingDescriptor descriptor) Set an optionalBindingDescriptor
to inject intoSAMLBindingContext
created.void
Set the identifier generation strategy.void
setPeerEntityRole
(QName role) Set the peer entity roleQName
.void
Set the role descriptor resolver.void
setSelfEntityIDResolver
(Resolver<String, CriteriaSet> resolver) Set the resolver for the self entityID.void
setSOAPClient
(SOAPClient client) Set the SOAP client instance.void
Set the SOAP client security configuration profile ID to use.void
setSOAPPipelineName
(String name) Set the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient
.private SAMLObject
validateAndExtractResponseMessage
(ArtifactResponse artifactResponse) Validate and extract the SAML protocol message from the artifact response.Methods inherited from class org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder
decode, getMessageToLog, getParserPool, logDecodedMessage, setParserPool, unmarshallMessage, validateHttpRequest
Methods inherited from class org.opensaml.messaging.decoder.servlet.AbstractHttpServletRequestMessageDecoder
getHttpServletRequest, setHttpServletRequest
Methods inherited from class org.opensaml.messaging.decoder.AbstractMessageDecoder
getMessageContext, setMessageContext
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, 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.DestructableComponent
destroy, isDestroyed
Methods inherited from interface net.shibboleth.utilities.java.support.component.InitializableComponent
initialize, isInitialized
Methods inherited from interface org.opensaml.messaging.decoder.MessageDecoder
decode, getMessageContext
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
bindingDescriptor
OptionalBindingDescriptor
to inject intoSAMLBindingContext
created. -
artifactBuilderFactory
SAML 2 artifact builder factory. -
artifactEndpointResolver
Resolver for ArtifactResolutionService endpoints. -
roleDescriptorResolver
Role descriptor resolver. -
peerEntityRole
The peer entity role QName. -
selfEntityIDResolver
Resolver for the self entityID, based on the peer entity data. -
soapClient
SOAP client. -
soapPipelineName
The SOAP client message pipeline name. -
soapClientSecurityConfigurationProfileId
SOAP client security configuration profile ID. -
idStrategy
Identifier generation strategy.
-
-
Constructor Details
-
HTTPArtifactDecoder
public HTTPArtifactDecoder()
-
-
Method Details
-
doInitialize
- Overrides:
doInitialize
in classBaseHttpServletRequestXMLMessageDecoder
- Throws:
ComponentInitializationException
-
doDestroy
protected void doDestroy()- Overrides:
doDestroy
in classBaseHttpServletRequestXMLMessageDecoder
-
getIdentifierGenerationStrategy
Get the identifier generation strategy.- Returns:
- Returns the identifier generation strategy
-
setIdentifierGenerationStrategy
Set the identifier generation strategy.- Parameters:
strategy
- the identifier generation strategy
-
getSelfEntityIDResolver
Get the resolver for the self entityID.- Returns:
- the resolver
-
setSelfEntityIDResolver
Set the resolver for the self entityID.- Parameters:
resolver
- the resolver instance
-
getPeerEntityRole
Get the peer entity roleQName
.- Returns:
- the peer entity role
-
setPeerEntityRole
Set the peer entity roleQName
.- Parameters:
role
- the peer entity role
-
getArtifactEndpointResolver
Get the artifact endpoint resolver.- Returns:
- the endpoint resolver
-
setArtifactEndpointResolver
public void setArtifactEndpointResolver(@Nullable EndpointResolver<ArtifactResolutionService> resolver) Set the artifact endpoint resolver.- Parameters:
resolver
- the new resolver
-
getRoleDescriptorResolver
Get the role descriptor resolver.Must be capable of resolving descriptors based on
ArtifactCriterion
.- Returns:
- the role descriptor resolver
-
setRoleDescriptorResolver
Set the role descriptor resolver.Must be capable of resolving descriptors based on
ArtifactCriterion
.- Parameters:
resolver
- the role descriptor resolver
-
getArtifactBuilderFactory
Get the SAML 2 artifact builder factory.- Returns:
- the artifact builder factory in use
-
setArtifactBuilderFactory
Set the SAML 2 artifact builder factory.- Parameters:
factory
- the artifact builder factory
-
getSOAPClient
Get the SOAP client instance.- Returns:
- the SOAP client
-
setSOAPClient
Set the SOAP client instance.- Parameters:
client
- the SOAP client
-
getSOAPPipelineName
Get the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient
.- Returns:
- the pipeline name, or null
-
setSOAPPipelineName
Set the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient
.- Parameters:
name
- the pipeline name, or null
-
getSOAPClientSecurityConfigurationProfileId
Get the SOAP client security configuration profile ID to use.- Returns:
- the client security configuration profile ID, or null
-
setSOAPClientSecurityConfigurationProfileId
Set the SOAP client security configuration profile ID to use.- Parameters:
profileId
- the profile ID, or null
-
getBindingURI
Gets the SAML binding URI supported by this decoder.- Specified by:
getBindingURI
in interfaceSAMLMessageDecoder
- Returns:
- SAML binding URI supported by this decoder
-
getBindingDescriptor
Get an optionalBindingDescriptor
to inject intoSAMLBindingContext
created.- Returns:
- binding descriptor
-
setBindingDescriptor
Set an optionalBindingDescriptor
to inject intoSAMLBindingContext
created.- Parameters:
descriptor
- a binding descriptor
-
doDecode
Performs the decoding logic. By the time this is called, this decoder has already been initialized and checked to ensure that it has not been destroyed.- Specified by:
doDecode
in classAbstractMessageDecoder
- Throws:
MessageDecodingException
- thrown if there is a problem decoding the message
-
processArtifact
private void processArtifact(MessageContext messageContext, javax.servlet.http.HttpServletRequest request) throws MessageDecodingException Process the incoming artifact by decoding the artifacts, dereferencing it from the artifact issuer and storing the resulting protocol message in the message context.- Parameters:
messageContext
- the message context being processedrequest
- the HTTP servlet request- Throws:
MessageDecodingException
- thrown if there is a problem decoding or dereferencing the artifact
-
dereferenceArtifact
@Nonnull private SAMLObject dereferenceArtifact(@Nonnull SAML2Artifact artifact, @Nonnull RoleDescriptor peerRoleDescriptor, @Nonnull ArtifactResolutionService ars) throws MessageDecodingException De-reference the supplied artifact into the corresponding SAML protocol message.- Parameters:
artifact
- the artifact to de-referencepeerRoleDescriptor
- the peer RoleDescriptorars
- the peer's artifact resolution service endpoint- Returns:
- the de-referenced artifact
- Throws:
MessageDecodingException
- if there is fatal error, or if the artifact was not successfully resolved
-
validateAndExtractResponseMessage
@Nonnull private SAMLObject validateAndExtractResponseMessage(@Nonnull ArtifactResponse artifactResponse) throws MessageDecodingException Validate and extract the SAML protocol message from the artifact response.- Parameters:
artifactResponse
- the response to process- Returns:
- the SAML protocol message
- Throws:
MessageDecodingException
- if the protocol message was not sent or there was a non-success status response
-
buildArtifactResolveRequestMessage
@Nonnull private ArtifactResolve buildArtifactResolveRequestMessage(@Nonnull SAML2Artifact artifact, @Nonnull String endpoint, @Nonnull RoleDescriptor peerRoleDescriptor, @Nonnull String selfEntityID) throws EncodingException Build the SAML protocol message for artifact resolution.- Parameters:
artifact
- the artifact being de-referencedendpoint
- the peer artifact resolution service endpointpeerRoleDescriptor
- the peer RoleDescriptorselfEntityID
- the entityID of this party, the issuer of the protocol request message- Returns:
- the SAML protocol message for artifact resolution
- Throws:
EncodingException
- if the artifact can not be base64 encoded.
-
resolveSelfEntityID
@Nonnull private String resolveSelfEntityID(@Nonnull RoleDescriptor peerRoleDescriptor) throws MessageDecodingException Resolve the self entityID, used as the issuer of the protocol message by this entity.- Parameters:
peerRoleDescriptor
- the peer RoleDescriptor- Returns:
- the resolved self entityID
- Throws:
MessageDecodingException
- if there was a fatal error during resolution, or the entityID could not be resolved
-
buildIssuer
Build the SAML protocol message Issuer element.- Parameters:
selfEntityID
- the entity ID of the protocol message issuer (this entity)- Returns:
- the Issuer element
-
resolveArtifactEndpoint
@Nonnull private ArtifactResolutionService resolveArtifactEndpoint(@Nonnull SAML2Artifact artifact, @Nonnull RoleDescriptor peerRoleDescriptor) throws MessageDecodingException Resolve the artifact resolution endpoint of the peer who issued the artifact.- Parameters:
artifact
- the artifactpeerRoleDescriptor
- the peer RoleDescriptor- Returns:
- the peer artifact resolution service endpoint
- Throws:
MessageDecodingException
- if there is a fatal error resolving the endpoint, or the endpoint could not be resolved
-
resolvePeerRoleDescriptor
@Nonnull private RoleDescriptor resolvePeerRoleDescriptor(@Nonnull SAML2Artifact artifact) throws MessageDecodingException Resolve the role descriptor of the SAML peer who issued the supplied artifact.- Parameters:
artifact
- the artifact to process- Returns:
- the peer RoleDescriptor
- Throws:
MessageDecodingException
- if there was a fatal error resolving the role descriptor, or the descriptor could not be resolved
-
parseArtifact
@Nonnull private SAML2Artifact parseArtifact(@Nonnull String encodedArtifact) throws MessageDecodingException Parse and decode the supplied encoded artifact string into aSAML2Artifact
instance.- Parameters:
encodedArtifact
- the encoded artifact which was received- Returns:
- the decoded artifact instance
- Throws:
MessageDecodingException
- if the encoded artifact could not be decoded
-
populateBindingContext
Populate the context which carries information specific to this binding.- Parameters:
messageContext
- the current message context
-