@Override public CompletionStage<Void> beforeInitiatingSso(ServiceRequestContext ctx, HttpRequest req, MessageContext<AuthnRequest> message, SamlIdentityProviderConfig idpConfig) { final String requestedPath = req.path(); if (requestedPath.length() <= 80) { // Relay the requested path by default. final SAMLBindingContext sub = message.getSubcontext(SAMLBindingContext.class, true); assert sub != null : "SAMLBindingContext"; sub.setRelayState(requestedPath); } return CompletableFuture.completedFuture(null); }
@Override public CompletionStage<Void> beforeInitiatingSso(ServiceRequestContext ctx, HttpRequest req, MessageContext<AuthnRequest> message, SamlIdentityProviderConfig idpConfig) { message.getSubcontext(SAMLBindingContext.class, true) .setRelayState(req.path()); return CompletableFuture.completedFuture(null); }
final SAMLBindingContext context = messageContext.getSubcontext(SAMLBindingContext.class, true); assert context != null; context.setRelayState(relayState);
/** * 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; }
/** * Set the SAML protocol relay state on a message context. * * @param messageContext the message context on which to operate * @param relayState the relay state to set */ public static void setRelayState(@Nonnull final MessageContext<SAMLObject> messageContext, @Nullable String relayState) { messageContext.getSubcontext(SAMLBindingContext.class, true).setRelayState(relayState); }
@Override public CompletionStage<Void> beforeInitiatingSso(ServiceRequestContext ctx, HttpRequest req, MessageContext<AuthnRequest> message, SamlIdentityProviderConfig idpConfig) { final String requestedPath = req.path(); if (requestedPath.length() <= 80) { // Relay the requested path by default. final SAMLBindingContext sub = message.getSubcontext(SAMLBindingContext.class, true); assert sub != null : "SAMLBindingContext"; sub.setRelayState(requestedPath); } return CompletableFuture.completedFuture(null); }
@Override public CompletionStage<Void> beforeInitiatingSso(ServiceRequestContext ctx, HttpRequest req, MessageContext<AuthnRequest> message, SamlIdentityProviderConfig idpConfig) { final QueryStringDecoder decoder = new QueryStringDecoder(req.path(), true); final List<String> ref = decoder.parameters().get("ref"); if (ref == null || ref.isEmpty()) { return CompletableFuture.completedFuture(null); } final String relayState = ref.get(0); if (idpConfig.ssoEndpoint().bindingProtocol() == SamlBindingProtocol.HTTP_REDIRECT && relayState.length() > 80) { return CompletableFuture.completedFuture(null); } final SAMLBindingContext sub = message.getSubcontext(SAMLBindingContext.class, true); assert sub != null : SAMLBindingContext.class.getName(); sub.setRelayState(relayState); return CompletableFuture.completedFuture(null); }
outboundCtx.setRelayState(SAMLBindingSupport.getRelayState( profileRequestContext.getInboundMessageContext())); outboundCtx.setBindingDescriptor(binding.get());
/** * Populate the context which carries information specific to this binding. * * @param messageContext the current message context */ protected void populateBindingContext(@Nonnull final MessageContext<SAMLObject> messageContext) { final String relayState = ssoRequest.getRelayState(); log.debug("Decoded SAML RelayState of: {}", relayState); final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true); bindingContext.setRelayState(relayState); bindingContext.setBindingUri(getBindingURI()); bindingContext.setBindingDescriptor(getBindingDescriptor()); bindingContext.setHasBindingSignature(false); bindingContext.setIntendedDestinationEndpointURIRequired(false); }
/** * Populate the context which carries information specific to this binding. * * @param messageContext the current message context * * @throws MessageDecodingException if the message content is invalid */ protected void populateBindingContext(@Nonnull final MessageContext<IdPInitiatedSSORequest> messageContext) throws MessageDecodingException { final String relayState = messageContext.getMessage().getRelayState(); if (relayState == null) { throw new MessageDecodingException("Legacy Shibboleth authentication requests require a target parameter"); } log.debug("Decoded SAML relay state: {}", relayState); final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true); bindingContext.setRelayState(relayState); bindingContext.setBindingUri(getBindingURI()); bindingContext.setBindingDescriptor(getBindingDescriptor()); bindingContext.setHasBindingSignature(false); bindingContext.setIntendedDestinationEndpointURIRequired(false); }
final SAMLBindingContext context = messageContext.getSubcontext(SAMLBindingContext.class, true); assert context != null; context.setRelayState(relayState);
/** * 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; }
bindingCtx.setRelayState(SAMLBindingSupport.getRelayState(profileRequestContext.getInboundMessageContext()));
bindingCtx.setRelayState(SAMLBindingSupport.getRelayState( profileRequestContext.getInboundMessageContext()));
.isIntendedDestinationEndpointURIRequired()); final String relayState = bindingContext.getRelayState(); decodedCtx.getSAMLBindingContext().setRelayState(relayState); context.getSAMLBindingContext().setRelayState(relayState);
outboundContext.getSAMLBindingContext().setRelayState(relayState.toString());