Class HTTPArtifactDecoder
java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.messaging.decoder.AbstractMessageDecoder
org.opensaml.messaging.decoder.servlet.AbstractHttpServletRequestMessageDecoder
org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder
org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder
org.opensaml.saml.saml2.binding.decoding.impl.HTTPArtifactDecoder
- All Implemented Interfaces:
Component,DestructableComponent,InitializableComponent,UnmodifiableComponent,MessageDecoder,HttpServletRequestMessageDecoder,SAMLMessageDecoder
public class HTTPArtifactDecoder
extends BaseSAMLHttpServletRequestDecoder
implements SAMLMessageDecoder
SAML 2 Artifact Binding decoder, support both HTTP GET and POST.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate SAML2ArtifactBuilderFactorySAML 2 artifact builder factory.Resolver for ArtifactResolutionService endpoints.private BindingDescriptorOptionalBindingDescriptorto inject intoSAMLBindingContextcreated.private IdentifierGenerationStrategyIdentifier generation strategy.private final org.slf4j.LoggerClass logger.private QNameThe peer entity role QName.private RoleDescriptorResolverRole descriptor resolver.private Resolver<String,CriteriaSet> Resolver for the self entityID, based on the peer entity data.private SOAPClientSOAP client.private StringSOAP client security configuration profile ID.private StringThe SOAP client message pipeline name.Fields inherited from class org.opensaml.messaging.decoder.AbstractMessageDecoder
BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate 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, String endpoint) De-reference the supplied artifact into the corresponding SAML protocol message.protected voiddoDecode()Performs the decoding logic.protected voidGet the SAML 2 artifact builder factory.Get the artifact endpoint resolver.Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.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 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, 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 StringresolveArtifactEndpoint(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.voidSet the SAML 2 artifact builder factory.voidSet the artifact endpoint resolver.voidsetBindingDescriptor(BindingDescriptor descriptor) Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.voidSet the identifier generation strategy.voidsetPeerEntityRole(QName role) Set the peer entity roleQName.voidSet the role descriptor resolver.voidsetSelfEntityIDResolver(Resolver<String, CriteriaSet> resolver) Set the resolver for the self entityID.voidsetSOAPClient(SOAPClient client) Set the SOAP client instance.voidSet 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, getParserPool, serializeMessageForLogging, setParserPool, unmarshallMessage, validateHttpRequestMethods inherited from class org.opensaml.messaging.decoder.servlet.AbstractHttpServletRequestMessageDecoder
getHttpServletRequest, getHttpServletRequestSupplier, setHttpServletRequestSupplierMethods inherited from class org.opensaml.messaging.decoder.AbstractMessageDecoder
getMessageContext, getMessageToLog, getProtocolMessageLogger, getProtocolMessageLoggerSubCategory, logDecodedMessage, setMessageContext, setProtocolMessageLoggerSubCategoryMethods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent
checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitializedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.shibboleth.shared.component.DestructableComponent
destroy, isDestroyedMethods inherited from interface net.shibboleth.shared.component.InitializableComponent
initialize, isInitializedMethods inherited from interface org.opensaml.messaging.decoder.MessageDecoder
decode, getMessageContext
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
bindingDescriptor
OptionalBindingDescriptorto inject intoSAMLBindingContextcreated. -
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:
doInitializein classBaseHttpServletRequestXMLMessageDecoder- Throws:
ComponentInitializationException
-
getIdentifierGenerationStrategy
Get the identifier generation strategy.- Returns:
- Returns the identifier generation strategy
-
getSelfEntityIDResolver
Get the resolver for the self entityID.- Returns:
- the resolver
-
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:
getBindingURIin interfaceSAMLMessageDecoder- Returns:
- SAML binding URI supported by this decoder
-
getBindingDescriptor
Get an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- Returns:
- binding descriptor
-
setBindingDescriptor
Set an optionalBindingDescriptorto inject intoSAMLBindingContextcreated.- 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:
doDecodein classAbstractMessageDecoder- Throws:
MessageDecodingException- thrown if there is a problem decoding the message
-
processArtifact
private void processArtifact(@Nonnull MessageContext messageContext, @Nonnull 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 String endpoint) throws MessageDecodingException De-reference the supplied artifact into the corresponding SAML protocol message.- Parameters:
artifact- the artifact to de-referencepeerRoleDescriptor- the peer RoleDescriptorendpoint- 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 String 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
Populate the context which carries information specific to this binding.- Parameters:
messageContext- the current message context
-