messageContext.setMessage(message);
/** * Converts an {@link AggregatedHttpMessage} which is received from the remote entity to * a {@link SAMLObject}. */ static <T extends SAMLObject> MessageContext<T> toSamlObject(AggregatedHttpMessage msg, String name) { final SamlParameters parameters = new SamlParameters(msg); final byte[] decoded; try { decoded = Base64.getMimeDecoder().decode(parameters.getFirstValue(name)); } catch (IllegalArgumentException e) { throw new SamlException("failed to decode a base64 string of the parameter: " + name, e); } @SuppressWarnings("unchecked") final T message = (T) deserialize(decoded); final MessageContext<T> messageContext = new MessageContext<>(); messageContext.setMessage(message); final String relayState = parameters.getFirstValueOrNull(RELAY_STATE); if (relayState != null) { final SAMLBindingContext context = messageContext.getSubcontext(SAMLBindingContext.class, true); assert context != null; context.setRelayState(relayState); } return messageContext; }
final AuthnRequest request = createAuthRequest(idp, defaultHostname); final MessageContext<AuthnRequest> messageContext = new MessageContext<>(); messageContext.setMessage(request); return new MessageContextAndIdpConfig(messageContext, idp); }).thenCompose(arg -> {
/** * Prepare outbound context. * * @param <T> the type parameter * @param samlObject the saml object * @param adaptor the adaptor * @param outboundContext the outbound context * @param binding the binding * @param authnRequest the authn request * @throws SamlException the saml exception */ protected <T extends SAMLObject> void prepareOutboundContext(final T samlObject, final SamlRegisteredServiceServiceProviderMetadataFacade adaptor, final MessageContext<T> outboundContext, final String binding, final RequestAbstractType authnRequest) throws SamlException { LOGGER.trace("Outbound saml object to use is [{}]", samlObject.getClass().getName()); outboundContext.setMessage(samlObject); SamlIdPUtils.preparePeerEntitySamlEndpointContext(authnRequest, outboundContext, adaptor, binding); }
protected MessageContext<Pac4jSAMLResponse> prepareOutboundMessageContext(final WebContext webContext) { final Pac4jSAMLResponse outTransport = new DefaultPac4jSAMLResponse(webContext); final MessageContext<Pac4jSAMLResponse> outCtx = new MessageContext<>(); outCtx.setMessage(outTransport); return outCtx; }
/** {@inheritDoc} */ protected void doInvoke(@Nonnull MessageContext<Envelope> messageContext) throws MessageHandlerException { Envelope env = (Envelope) messageContext.getSubcontext(SOAP11Context.class).getEnvelope(); if (env == null) { throw new MessageHandlerException("MessageContext did not contain a SOAP Envelope"); } messageContext.setMessage(env); }
/** {@inheritDoc} */ protected void doInvoke(MessageContext messageContext) throws MessageHandlerException { Envelope env = (Envelope) messageContext.getSubcontext(SOAP11Context.class).getEnvelope(); List<XMLObject> bodyChildren = env.getBody().getUnknownXMLObjects(); if (bodyChildren == null || bodyChildren.isEmpty()) { throw new MessageHandlerException("SOAP Envelope Body contained no children"); } else if (bodyChildren.size() > 1) { log.warn("SOAP Envelope Body contained more than one child. Returning the first as the message"); } messageContext.setMessage(env.getBody().getUnknownXMLObjects().get(0)); }
/** {@inheritDoc} */ @Override @Nullable public List<Assertion> apply(@Nullable final ProfileRequestContext input) { if (input != null && input.getOutboundMessageContext() != null) { final Object outboundMessage = input.getOutboundMessageContext().getMessage(); if (outboundMessage == null) { final Assertion ret = SAML2ActionSupport.buildAssertion(AddNameIDToSubjects.this, idGenerator, issuerId); input.getOutboundMessageContext().setMessage(ret); return Collections.singletonList(ret); } else if (outboundMessage instanceof Assertion) { return Collections.singletonList((Assertion) outboundMessage); } else if (outboundMessage instanceof Response) { return ((Response) outboundMessage).getAssertions(); } } return null; } }
/** {@inheritDoc} */ @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) { ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this); detailedErrors = detailedErrorsCondition.apply(profileRequestContext); log.debug("{} Detailed errors are {}", getLogPrefix(), detailedErrors ? "enabled" : "disabled"); if (profileRequestContext.getOutboundMessageContext() != null && nullifyOutboundMessage) { profileRequestContext.getOutboundMessageContext().setMessage(null); } else { profileRequestContext.setOutboundMessageContext(new MessageContext<Object>()); } return super.doPreExecute(profileRequestContext); }
/** {@inheritDoc} */ protected void doDecode() throws MessageDecodingException { MessageContext<SAMLObject> messageContext = new MessageContext<>(); HttpServletRequest request = getHttpServletRequest(); if (!"POST".equalsIgnoreCase(request.getMethod())) { throw new MessageDecodingException("This message decoder only supports the HTTP POST method"); } String relayState = request.getParameter("TARGET"); log.debug("Decoded SAML relay state (TARGET parameter) of: {}", relayState); SAMLBindingSupport.setRelayState(messageContext, relayState); String base64Message = request.getParameter("SAMLResponse"); byte[] decodedBytes = Base64Support.decode(base64Message); if (decodedBytes == null) { log.error("Unable to Base64 decode SAML message"); throw new MessageDecodingException("Unable to Base64 decode SAML message"); } SAMLObject inboundMessage = (SAMLObject) unmarshallMessage(new ByteArrayInputStream(decodedBytes)); messageContext.setMessage(inboundMessage); log.debug("Decoded SAML message"); populateBindingContext(messageContext); setMessageContext(messageContext); }
/** {@inheritDoc} */ protected void doDecode() throws MessageDecodingException { MessageContext<SAMLObject> messageContext = new MessageContext<>(); HttpServletRequest request = getHttpServletRequest(); if (!"POST".equalsIgnoreCase(request.getMethod())) { throw new MessageDecodingException("This message decoder only supports the HTTP POST method"); } String relayState = request.getParameter("RelayState"); log.debug("Decoded SAML relay state of: {}", relayState); SAMLBindingSupport.setRelayState(messageContext, relayState); InputStream base64DecodedMessage = getBase64DecodedMessage(request); SAMLObject inboundMessage = (SAMLObject) unmarshallMessage(base64DecodedMessage); messageContext.setMessage(inboundMessage); log.debug("Decoded SAML message"); populateBindingContext(messageContext); setMessageContext(messageContext); }
/** {@inheritDoc} */ @Override protected void doDecode() throws MessageDecodingException { ssoRequest = buildIdPInitiatedSSORequest(); final MessageContext<SAMLObject> messageContext = new MessageContext<>(); messageContext.setMessage(buildAuthnRequest()); populateBindingContext(messageContext); setMessageContext(messageContext); }
/** * Build encoder message context. * * @param request the authn request * @param samlObject the saml response * @param relayState the relay state * @return the message context */ protected MessageContext getEncoderMessageContext(final RequestAbstractType request, final T samlObject, final String relayState) { val ctx = new MessageContext<SAMLObject>(); ctx.setMessage(samlObject); SAMLBindingSupport.setRelayState(ctx, relayState); SamlIdPUtils.preparePeerEntitySamlEndpointContext(request, ctx, adaptor, getBinding()); val self = ctx.getSubcontext(SAMLSelfEntityContext.class, true); self.setEntityId(SamlIdPUtils.getIssuerFromSamlObject(samlObject)); return ctx; }
/** {@inheritDoc} */ public void prepareContext() throws MessageEncodingException { MessageContext<MessageType> messageContext = getMessageContext(); XMLObject payload = null; Fault fault = SOAPMessagingSupport.getSOAP11Fault(messageContext); if (fault != null) { log.debug("Saw SOAP 1.1 Fault payload with fault code, replacing any existing context message: {}", fault.getCode() != null ? fault.getCode().getValue() : null); payload = fault; messageContext.setMessage(null); } else { payload = messageContext.getMessage(); } if (payload == null) { throw new MessageEncodingException("No outbound message or Fault contained in message context"); } if (payload instanceof Envelope) { storeSOAPEnvelope((Envelope) payload); } else { buildAndStoreSOAPMessage(payload); } }
/** {@inheritDoc} */ public void prepareContext() throws MessageEncodingException { final MessageContext<SAMLObject> messageContext = getMessageContext(); XMLObject payload = null; final Fault fault = SOAPMessagingSupport.getSOAP11Fault(messageContext); if (fault != null) { log.debug("Saw SOAP 1.1 Fault payload with fault code, replacing any existing context message: {}", fault.getCode() != null ? fault.getCode().getValue() : null); payload = fault; messageContext.setMessage(null); } else { payload = messageContext.getMessage(); } if (payload == null) { throw new MessageEncodingException("No outbound message or Fault contained in message context"); } if (payload instanceof Envelope) { storeSOAPEnvelope((Envelope) payload); } else { buildAndStoreSOAPMessage(payload); } }
/** {@inheritDoc} */ @Override protected void doDecode() throws MessageDecodingException { final IdPInitiatedSSORequest ssoRequest = buildIdPInitiatedSSORequest(); final MessageContext<IdPInitiatedSSORequest> messageContext = new MessageContext<>(); messageContext.setMessage(ssoRequest); messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(ssoRequest.getEntityId()); final SAMLMessageInfoContext msgInfoContext = messageContext.getSubcontext(SAMLMessageInfoContext.class, true); msgInfoContext.setMessageIssueInstant(new DateTime(ssoRequest.getTime(), ISOChronology.getInstanceUTC())); msgInfoContext.setMessageId(getMessageID()); populateBindingContext(messageContext); setMessageContext(messageContext); }
/** {@inheritDoc} */ @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) { final XMLObjectBuilderFactory bf = XMLObjectProviderRegistrySupport.getBuilderFactory(); final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) bf.<StatusCode>getBuilderOrThrow(StatusCode.DEFAULT_ELEMENT_NAME); final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) bf.<Status>getBuilderOrThrow(Status.DEFAULT_ELEMENT_NAME); final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) bf.<Response>getBuilderOrThrow(Response.DEFAULT_ELEMENT_NAME); final StatusCode statusCode = statusCodeBuilder.buildObject(); statusCode.setValue(StatusCode.SUCCESS); final Status status = statusBuilder.buildObject(); status.setStatusCode(statusCode); final Response response = responseBuilder.buildObject(); response.setID(idGenerator.generateIdentifier()); response.setIssueInstant(new DateTime(ISOChronology.getInstanceUTC())); response.setStatus(status); response.setVersion(SAMLVersion.VERSION_11); profileRequestContext.getOutboundMessageContext().setMessage(response); }
@Override protected void doEncode() throws MessageEncodingException { val messageContext = new MessageContext(); if (logoutRequest.isSigned()) { val signingContext = messageContext.getSubcontext(SecurityParametersContext.class, true); val signingParams = new SignatureSigningParameters(); val signature = logoutRequest.getSignature(); signingParams.setSigningCredential(signature.getSigningCredential()); signingParams.setSignatureAlgorithm(signature.getSignatureAlgorithm()); signingContext.setSignatureSigningParameters(signingParams); } removeSignature(logoutRequest); val encodedMessage = deflateAndBase64Encode(logoutRequest); messageContext.setMessage(logoutRequest); this.redirectUrl = buildRedirectURL(messageContext, endpointUrl, encodedMessage); }
/** {@inheritDoc} */ @Override protected void doDecode() throws MessageDecodingException { final HttpServletRequest request = getHttpServletRequest(); if (request == null) { throw new MessageDecodingException("Unable to locate HttpServletRequest"); } final ResolverTestRequest message = new ResolverTestRequest(getPrincipal(request), getRequesterId(request), getIndex(request), getProtocol(request)); final MessageContext<ResolverTestRequest> messageContext = new MessageContext<>(); messageContext.setMessage(message); setMessageContext(messageContext); final SAMLPeerEntityContext peerCtx = new SAMLPeerEntityContext(); peerCtx.setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME); peerCtx.setEntityId(message.getRequesterId()); messageContext.addSubcontext(peerCtx, true); if (message.getProtocol() != null) { messageContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(message.getProtocol()); } }
/** {@inheritDoc} */ @Override protected void doDecode() throws MessageDecodingException { final HttpServletRequest request = getHttpServletRequest(); if (request == null) { throw new MessageDecodingException("Unable to locate HttpServletRequest"); } final MetadataQueryRequest message = new MetadataQueryRequest(); message.setEntityID(getEntityID(request)); message.setProtocol(getProtocol(request)); final MessageContext<MetadataQueryRequest> messageContext = new MessageContext<>(); messageContext.setMessage(message); setMessageContext(messageContext); final SAMLPeerEntityContext peerCtx = new SAMLPeerEntityContext(); peerCtx.setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME); peerCtx.setEntityId(message.getEntityID()); messageContext.addSubcontext(peerCtx, true); if (message.getProtocol() != null) { messageContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(message.getProtocol()); } }