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:
net.shibboleth.utilities.java.support.component.Component,net.shibboleth.utilities.java.support.component.DestructableComponent,net.shibboleth.utilities.java.support.component.InitializableComponent,net.shibboleth.utilities.java.support.component.UnmodifiableComponent,org.opensaml.messaging.decoder.MessageDecoder,org.opensaml.messaging.decoder.servlet.HttpServletRequestMessageDecoder,org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder
public class HTTPArtifactDecoder extends org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder implements org.opensaml.saml.common.binding.decoding.SAMLMessageDecoderSAML 2 Artifact Binding decoder, support both HTTP GET and POST.
-
-
Field Summary
Fields Modifier and Type Field Description private org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactoryartifactBuilderFactorySAML 2 artifact builder factory.private org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService>artifactEndpointResolverResolver for ArtifactResolutionService endpoints.private org.opensaml.saml.common.binding.BindingDescriptorbindingDescriptorOptionalBindingDescriptorto inject intoSAMLBindingContextcreated.private net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategyidStrategyIdentifier generation strategy.private org.slf4j.LoggerlogClass logger.private QNamepeerEntityRoleThe peer entity role QName.private org.opensaml.saml.metadata.resolver.RoleDescriptorResolverroleDescriptorResolverRole descriptor resolver.private net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet>selfEntityIDResolverResolver for the self entityID, based on the peer entity data.private org.opensaml.soap.client.SOAPClientsoapClientSOAP client.private StringsoapClientSecurityConfigurationProfileIdSOAP client security configuration profile ID.private StringsoapPipelineNameThe SOAP client message pipeline name.
-
Constructor Summary
Constructors Constructor Description HTTPArtifactDecoder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private org.opensaml.saml.saml2.core.ArtifactResolvebuildArtifactResolveRequestMessage(org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, String endpoint, org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor, String selfEntityID)Build the SAML protocol message for artifact resolution.private org.opensaml.saml.saml2.core.IssuerbuildIssuer(String selfEntityID)Build the SAML protocol message Issuer element.private org.opensaml.saml.common.SAMLObjectdereferenceArtifact(org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor, org.opensaml.saml.saml2.metadata.ArtifactResolutionService ars)De-reference the supplied artifact into the corresponding SAML protocol message.protected voiddoDecode()protected voiddoDestroy()protected voiddoInitialize()org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactorygetArtifactBuilderFactory()Get the SAML 2 artifact builder factory.org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService>getArtifactEndpointResolver()Get the artifact endpoint resolver.org.opensaml.saml.common.binding.BindingDescriptorgetBindingDescriptor()Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.StringgetBindingURI()net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategygetIdentifierGenerationStrategy()Get the identifier generation strategy.QNamegetPeerEntityRole()Get the peer entity roleQName.org.opensaml.saml.metadata.resolver.RoleDescriptorResolvergetRoleDescriptorResolver()Get the role descriptor resolver.net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet>getSelfEntityIDResolver()Get the resolver for the self entityID.org.opensaml.soap.client.SOAPClientgetSOAPClient()Get the SOAP client instance.StringgetSOAPClientSecurityConfigurationProfileId()Get the SOAP client security configuration profile ID to use.StringgetSOAPPipelineName()Get the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient.private org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactparseArtifact(String encodedArtifact)Parse and decode the supplied encoded artifact string into aSAML2Artifactinstance.protected voidpopulateBindingContext(org.opensaml.messaging.context.MessageContext messageContext)Populate the context which carries information specific to this binding.private voidprocessArtifact(org.opensaml.messaging.context.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 org.opensaml.saml.saml2.metadata.ArtifactResolutionServiceresolveArtifactEndpoint(org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor)Resolve the artifact resolution endpoint of the peer who issued the artifact.private org.opensaml.saml.saml2.metadata.RoleDescriptorresolvePeerRoleDescriptor(org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact)Resolve the role descriptor of the SAML peer who issued the supplied artifact.private StringresolveSelfEntityID(org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor)Resolve the self entityID, used as the issuer of the protocol message by this entity.voidsetArtifactBuilderFactory(org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory factory)Set the SAML 2 artifact builder factory.voidsetArtifactEndpointResolver(org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService> resolver)Set the artifact endpoint resolver.voidsetBindingDescriptor(org.opensaml.saml.common.binding.BindingDescriptor descriptor)Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.voidsetIdentifierGenerationStrategy(net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy strategy)Set the identifier generation strategy.voidsetPeerEntityRole(QName role)Set the peer entity roleQName.voidsetRoleDescriptorResolver(org.opensaml.saml.metadata.resolver.RoleDescriptorResolver resolver)Set the role descriptor resolver.voidsetSelfEntityIDResolver(net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet> resolver)Set the resolver for the self entityID.voidsetSOAPClient(org.opensaml.soap.client.SOAPClient client)Set the SOAP client instance.voidsetSOAPClientSecurityConfigurationProfileId(String profileId)Set the SOAP client security configuration profile ID to use.voidsetSOAPPipelineName(String name)Set the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient.private org.opensaml.saml.common.SAMLObjectvalidateAndExtractResponseMessage(org.opensaml.saml.saml2.core.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
-
-
-
-
Field Detail
-
log
@Nonnull private final org.slf4j.Logger log
Class logger.
-
bindingDescriptor
@Nullable private org.opensaml.saml.common.binding.BindingDescriptor bindingDescriptor
OptionalBindingDescriptorto inject intoSAMLBindingContextcreated.
-
artifactBuilderFactory
@NonnullAfterInit private org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory artifactBuilderFactory
SAML 2 artifact builder factory.
-
artifactEndpointResolver
@NonnullAfterInit private org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService> artifactEndpointResolver
Resolver for ArtifactResolutionService endpoints.
-
roleDescriptorResolver
@NonnullAfterInit private org.opensaml.saml.metadata.resolver.RoleDescriptorResolver roleDescriptorResolver
Role descriptor resolver.
-
peerEntityRole
@NonnullAfterInit private QName peerEntityRole
The peer entity role QName.
-
selfEntityIDResolver
@NonnullAfterInit private net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet> selfEntityIDResolver
Resolver for the self entityID, based on the peer entity data.
-
soapClient
private org.opensaml.soap.client.SOAPClient soapClient
SOAP client.
-
soapPipelineName
private String soapPipelineName
The SOAP client message pipeline name.
-
soapClientSecurityConfigurationProfileId
private String soapClientSecurityConfigurationProfileId
SOAP client security configuration profile ID.
-
idStrategy
private net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy idStrategy
Identifier generation strategy.
-
-
Method Detail
-
doInitialize
protected void doInitialize() throws net.shibboleth.utilities.java.support.component.ComponentInitializationException- Overrides:
doInitializein classorg.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder- Throws:
net.shibboleth.utilities.java.support.component.ComponentInitializationException
-
doDestroy
protected void doDestroy()
- Overrides:
doDestroyin classorg.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder
-
getIdentifierGenerationStrategy
@NonnullAfterInit public net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy getIdentifierGenerationStrategy()
Get the identifier generation strategy.- Returns:
- Returns the identifier generation strategy
-
setIdentifierGenerationStrategy
public void setIdentifierGenerationStrategy(@Nullable net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy strategy)Set the identifier generation strategy.- Parameters:
strategy- the identifier generation strategy
-
getSelfEntityIDResolver
@NonnullAfterInit public net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet> getSelfEntityIDResolver()
Get the resolver for the self entityID.- Returns:
- the resolver
-
setSelfEntityIDResolver
public void setSelfEntityIDResolver(@Nonnull net.shibboleth.utilities.java.support.resolver.Resolver<String,net.shibboleth.utilities.java.support.resolver.CriteriaSet> resolver)Set the resolver for the self entityID.- Parameters:
resolver- the resolver instance
-
getPeerEntityRole
@NonnullAfterInit public QName getPeerEntityRole()
Get the peer entity roleQName.- Returns:
- the peer entity role
-
setPeerEntityRole
public void setPeerEntityRole(@Nonnull QName role)Set the peer entity roleQName.- Parameters:
role- the peer entity role
-
getArtifactEndpointResolver
@NonnullAfterInit public org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService> getArtifactEndpointResolver()
Get the artifact endpoint resolver.- Returns:
- the endpoint resolver
-
setArtifactEndpointResolver
public void setArtifactEndpointResolver(@Nullable org.opensaml.saml.common.binding.EndpointResolver<org.opensaml.saml.saml2.metadata.ArtifactResolutionService> resolver)Set the artifact endpoint resolver.- Parameters:
resolver- the new resolver
-
getRoleDescriptorResolver
@NonnullAfterInit public org.opensaml.saml.metadata.resolver.RoleDescriptorResolver getRoleDescriptorResolver()
Get the role descriptor resolver.Must be capable of resolving descriptors based on
ArtifactCriterion.- Returns:
- the role descriptor resolver
-
setRoleDescriptorResolver
public void setRoleDescriptorResolver(@Nullable org.opensaml.saml.metadata.resolver.RoleDescriptorResolver resolver)Set the role descriptor resolver.Must be capable of resolving descriptors based on
ArtifactCriterion.- Parameters:
resolver- the role descriptor resolver
-
getArtifactBuilderFactory
@NonnullAfterInit public org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory getArtifactBuilderFactory()
Get the SAML 2 artifact builder factory.- Returns:
- the artifact builder factory in use
-
setArtifactBuilderFactory
public void setArtifactBuilderFactory(@Nullable org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory factory)Set the SAML 2 artifact builder factory.- Parameters:
factory- the artifact builder factory
-
getSOAPClient
@NonnullAfterInit public org.opensaml.soap.client.SOAPClient getSOAPClient()
Get the SOAP client instance.- Returns:
- the SOAP client
-
setSOAPClient
public void setSOAPClient(@Nonnull org.opensaml.soap.client.SOAPClient client)Set the SOAP client instance.- Parameters:
client- the SOAP client
-
getSOAPPipelineName
@Nullable public String getSOAPPipelineName()
Get the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient.- Returns:
- the pipeline name, or null
-
setSOAPPipelineName
public void setSOAPPipelineName(@Nullable String name)Set the name of the specific SOAP client message pipeline to use, for example withPipelineFactoryHttpSOAPClient.- Parameters:
name- the pipeline name, or null
-
getSOAPClientSecurityConfigurationProfileId
@Nullable public String getSOAPClientSecurityConfigurationProfileId()
Get the SOAP client security configuration profile ID to use.- Returns:
- the client security configuration profile ID, or null
-
setSOAPClientSecurityConfigurationProfileId
@Nonnull public void setSOAPClientSecurityConfigurationProfileId(@Nullable String profileId)Set the SOAP client security configuration profile ID to use.- Parameters:
profileId- the profile ID, or null
-
getBindingURI
@Nonnull @NotEmpty public String getBindingURI()
- Specified by:
getBindingURIin interfaceorg.opensaml.saml.common.binding.decoding.SAMLMessageDecoder
-
getBindingDescriptor
@Nullable public org.opensaml.saml.common.binding.BindingDescriptor getBindingDescriptor()
Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- Returns:
- binding descriptor
-
setBindingDescriptor
public void setBindingDescriptor(@Nullable org.opensaml.saml.common.binding.BindingDescriptor descriptor)Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- Parameters:
descriptor- a binding descriptor
-
doDecode
protected void doDecode() throws org.opensaml.messaging.decoder.MessageDecodingException- Specified by:
doDecodein classorg.opensaml.messaging.decoder.AbstractMessageDecoder- Throws:
org.opensaml.messaging.decoder.MessageDecodingException
-
processArtifact
private void processArtifact(org.opensaml.messaging.context.MessageContext messageContext, javax.servlet.http.HttpServletRequest request) throws org.opensaml.messaging.decoder.MessageDecodingExceptionProcess 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:
org.opensaml.messaging.decoder.MessageDecodingException- thrown if there is a problem decoding or dereferencing the artifact
-
dereferenceArtifact
@Nonnull private org.opensaml.saml.common.SAMLObject dereferenceArtifact(@Nonnull org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, @Nonnull org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor, @Nonnull org.opensaml.saml.saml2.metadata.ArtifactResolutionService ars) throws org.opensaml.messaging.decoder.MessageDecodingExceptionDe-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:
org.opensaml.messaging.decoder.MessageDecodingException- if there is fatal error, or if the artifact was not successfully resolved
-
validateAndExtractResponseMessage
@Nonnull private org.opensaml.saml.common.SAMLObject validateAndExtractResponseMessage(@Nonnull org.opensaml.saml.saml2.core.ArtifactResponse artifactResponse) throws org.opensaml.messaging.decoder.MessageDecodingExceptionValidate and extract the SAML protocol message from the artifact response.- Parameters:
artifactResponse- the response to process- Returns:
- the SAML protocol message
- Throws:
org.opensaml.messaging.decoder.MessageDecodingException- if the protocol message was not sent or there was a non-success status response
-
buildArtifactResolveRequestMessage
@Nonnull private org.opensaml.saml.saml2.core.ArtifactResolve buildArtifactResolveRequestMessage(@Nonnull org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, @Nonnull String endpoint, @Nonnull org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor, @Nonnull String selfEntityID) throws net.shibboleth.utilities.java.support.codec.EncodingExceptionBuild 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:
net.shibboleth.utilities.java.support.codec.EncodingException- if the artifact can not be base64 encoded.
-
resolveSelfEntityID
@Nonnull private String resolveSelfEntityID(@Nonnull org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor) throws org.opensaml.messaging.decoder.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:
org.opensaml.messaging.decoder.MessageDecodingException- if there was a fatal error during resolution, or the entityID could not be resolved
-
buildIssuer
@Nonnull private org.opensaml.saml.saml2.core.Issuer buildIssuer(@Nonnull String selfEntityID)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 org.opensaml.saml.saml2.metadata.ArtifactResolutionService resolveArtifactEndpoint(@Nonnull org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact, @Nonnull org.opensaml.saml.saml2.metadata.RoleDescriptor peerRoleDescriptor) throws org.opensaml.messaging.decoder.MessageDecodingExceptionResolve 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:
org.opensaml.messaging.decoder.MessageDecodingException- if there is a fatal error resolving the endpoint, or the endpoint could not be resolved
-
resolvePeerRoleDescriptor
@Nonnull private org.opensaml.saml.saml2.metadata.RoleDescriptor resolvePeerRoleDescriptor(@Nonnull org.opensaml.saml.saml2.binding.artifact.SAML2Artifact artifact) throws org.opensaml.messaging.decoder.MessageDecodingExceptionResolve the role descriptor of the SAML peer who issued the supplied artifact.- Parameters:
artifact- the artifact to process- Returns:
- the peer RoleDescriptor
- Throws:
org.opensaml.messaging.decoder.MessageDecodingException- if there was a fatal error resolving the role descriptor, or the descriptor could not be resolved
-
parseArtifact
@Nonnull private org.opensaml.saml.saml2.binding.artifact.SAML2Artifact parseArtifact(@Nonnull String encodedArtifact) throws org.opensaml.messaging.decoder.MessageDecodingExceptionParse and decode the supplied encoded artifact string into aSAML2Artifactinstance.- Parameters:
encodedArtifact- the encoded artifact which was received- Returns:
- the decoded artifact instance
- Throws:
org.opensaml.messaging.decoder.MessageDecodingException- if the encoded artifact could not be decoded
-
populateBindingContext
protected void populateBindingContext(org.opensaml.messaging.context.MessageContext messageContext)
Populate the context which carries information specific to this binding.- Parameters:
messageContext- the current message context
-
-