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
Fields Modifier and Type Field Description private SAML2ArtifactBuilderFactoryartifactBuilderFactorySAML 2 artifact builder factory.private EndpointResolver<ArtifactResolutionService>artifactEndpointResolverResolver for ArtifactResolutionService endpoints.private BindingDescriptorbindingDescriptorOptionalBindingDescriptorto inject intoSAMLBindingContextcreated.private IdentifierGenerationStrategyidStrategyIdentifier generation strategy.private org.slf4j.LoggerlogClass logger.private QNamepeerEntityRoleThe peer entity role QName.private RoleDescriptorResolverroleDescriptorResolverRole descriptor resolver.private Resolver<String,CriteriaSet>selfEntityIDResolverResolver for the self entityID, based on the peer entity data.private 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 ArtifactResolvebuildArtifactResolveRequestMessage(SAML2Artifact artifact, String endpoint, RoleDescriptor peerRoleDescriptor, String selfEntityID)Build the SAML protocol message for artifact resolution.private IssuerbuildIssuer(String selfEntityID)Build the SAML protocol message Issuer element.private SAMLObjectdereferenceArtifact(SAML2Artifact artifact, RoleDescriptor peerRoleDescriptor, ArtifactResolutionService ars)De-reference the supplied artifact into the corresponding SAML protocol message.protected voiddoDecode()protected voiddoDestroy()protected voiddoInitialize()SAML2ArtifactBuilderFactorygetArtifactBuilderFactory()Get the SAML 2 artifact builder factory.EndpointResolver<ArtifactResolutionService>getArtifactEndpointResolver()Get the artifact endpoint resolver.BindingDescriptorgetBindingDescriptor()Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.StringgetBindingURI()IdentifierGenerationStrategygetIdentifierGenerationStrategy()Get the identifier generation strategy.QNamegetPeerEntityRole()Get the peer entity roleQName.RoleDescriptorResolvergetRoleDescriptorResolver()Get the role descriptor resolver.Resolver<String,CriteriaSet>getSelfEntityIDResolver()Get the resolver for the self entityID.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 SAML2ArtifactparseArtifact(String encodedArtifact)Parse and decode the supplied encoded artifact string into aSAML2Artifactinstance.protected voidpopulateBindingContext(MessageContext messageContext)Populate the context which carries information specific to this binding.private voidprocessArtifact(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 ArtifactResolutionServiceresolveArtifactEndpoint(SAML2Artifact artifact, RoleDescriptor peerRoleDescriptor)Resolve the artifact resolution endpoint of the peer who issued the artifact.private RoleDescriptorresolvePeerRoleDescriptor(SAML2Artifact artifact)Resolve the role descriptor of the SAML peer who issued the supplied artifact.private StringresolveSelfEntityID(RoleDescriptor peerRoleDescriptor)Resolve the self entityID, used as the issuer of the protocol message by this entity.voidsetArtifactBuilderFactory(SAML2ArtifactBuilderFactory factory)Set the SAML 2 artifact builder factory.voidsetArtifactEndpointResolver(EndpointResolver<ArtifactResolutionService> resolver)Set the artifact endpoint resolver.voidsetBindingDescriptor(BindingDescriptor descriptor)Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.voidsetIdentifierGenerationStrategy(IdentifierGenerationStrategy strategy)Set the identifier generation strategy.voidsetPeerEntityRole(QName role)Set the peer entity roleQName.voidsetRoleDescriptorResolver(RoleDescriptorResolver resolver)Set the role descriptor resolver.voidsetSelfEntityIDResolver(Resolver<String,CriteriaSet> resolver)Set the resolver for the self entityID.voidsetSOAPClient(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 SAMLObjectvalidateAndExtractResponseMessage(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, getHttpServletRequestSupplier, setHttpServletRequest, setHttpServletRequestSupplier
-
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 Detail
-
log
@Nonnull private final org.slf4j.Logger log
Class logger.
-
bindingDescriptor
@Nullable private BindingDescriptor bindingDescriptor
OptionalBindingDescriptorto inject intoSAMLBindingContextcreated.
-
artifactBuilderFactory
@NonnullAfterInit private SAML2ArtifactBuilderFactory artifactBuilderFactory
SAML 2 artifact builder factory.
-
artifactEndpointResolver
@NonnullAfterInit private EndpointResolver<ArtifactResolutionService> artifactEndpointResolver
Resolver for ArtifactResolutionService endpoints.
-
roleDescriptorResolver
@NonnullAfterInit private RoleDescriptorResolver roleDescriptorResolver
Role descriptor resolver.
-
peerEntityRole
@NonnullAfterInit private QName peerEntityRole
The peer entity role QName.
-
selfEntityIDResolver
@NonnullAfterInit private Resolver<String,CriteriaSet> selfEntityIDResolver
Resolver for the self entityID, based on the peer entity data.
-
soapClient
private 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 IdentifierGenerationStrategy idStrategy
Identifier generation strategy.
-
-
Method Detail
-
doInitialize
protected void doInitialize() throws ComponentInitializationException- Overrides:
doInitializein classBaseHttpServletRequestXMLMessageDecoder- Throws:
ComponentInitializationException
-
doDestroy
protected void doDestroy()
- Overrides:
doDestroyin classBaseHttpServletRequestXMLMessageDecoder
-
getIdentifierGenerationStrategy
@NonnullAfterInit public IdentifierGenerationStrategy getIdentifierGenerationStrategy()
Get the identifier generation strategy.- Returns:
- Returns the identifier generation strategy
-
setIdentifierGenerationStrategy
public void setIdentifierGenerationStrategy(@Nullable IdentifierGenerationStrategy strategy)Set the identifier generation strategy.- Parameters:
strategy- the identifier generation strategy
-
getSelfEntityIDResolver
@NonnullAfterInit public Resolver<String,CriteriaSet> getSelfEntityIDResolver()
Get the resolver for the self entityID.- Returns:
- the resolver
-
setSelfEntityIDResolver
public void setSelfEntityIDResolver(@Nonnull Resolver<String,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 EndpointResolver<ArtifactResolutionService> 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
@NonnullAfterInit public 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 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 SAML2ArtifactBuilderFactory getArtifactBuilderFactory()
Get the SAML 2 artifact builder factory.- Returns:
- the artifact builder factory in use
-
setArtifactBuilderFactory
public void setArtifactBuilderFactory(@Nullable SAML2ArtifactBuilderFactory factory)Set the SAML 2 artifact builder factory.- Parameters:
factory- the artifact builder factory
-
getSOAPClient
@NonnullAfterInit public SOAPClient getSOAPClient()
Get the SOAP client instance.- Returns:
- the SOAP client
-
setSOAPClient
public void setSOAPClient(@Nonnull 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 interfaceSAMLMessageDecoder
-
getBindingDescriptor
@Nullable public BindingDescriptor getBindingDescriptor()
Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- Returns:
- binding descriptor
-
setBindingDescriptor
public void setBindingDescriptor(@Nullable BindingDescriptor descriptor)Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- Parameters:
descriptor- a binding descriptor
-
doDecode
protected void doDecode() throws MessageDecodingException- Specified by:
doDecodein classAbstractMessageDecoder- Throws:
MessageDecodingException
-
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
@Nonnull private 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 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 aSAML2Artifactinstance.- Parameters:
encodedArtifact- the encoded artifact which was received- Returns:
- the decoded artifact instance
- Throws:
MessageDecodingException- if the encoded artifact could not be decoded
-
populateBindingContext
protected void populateBindingContext(MessageContext messageContext)
Populate the context which carries information specific to this binding.- Parameters:
messageContext- the current message context
-
-