org.opensaml.messaging.context.MessageContext类的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(13.9k)|赞(0)|评价(0)|浏览(102)

本文整理了Java中org.opensaml.messaging.context.MessageContext类的一些代码示例,展示了MessageContext类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。MessageContext类的具体详情如下:
包路径:org.opensaml.messaging.context.MessageContext
类名称:MessageContext

MessageContext介绍

暂无

代码示例

代码示例来源:origin: line/armeria

/**
 * Invoked when the SAML authentication process is finished and a user is authenticated. You can get
 * information about the authenticated user from the {@link Response}, especially his or her login name.
 * In this example, an email address is used as a login name. The login name is transferred to a web
 * browser via {@code Set-Cookie} header.
 */
@Override
public HttpResponse loginSucceeded(ServiceRequestContext ctx, AggregatedHttpMessage req,
                  MessageContext<Response> message, @Nullable String sessionIndex,
                  @Nullable String relayState) {
  final String username =
      getNameId(message.getMessage(), SamlNameIdFormat.EMAIL).map(NameIDType::getValue)
                                  .orElse(null);
  if (username == null) {
    return HttpResponse.of(HttpStatus.UNAUTHORIZED, MediaType.HTML_UTF_8,
                "<html><body>Username is not found.</body></html>");
  }
  logger.info("{} user '{}' has been logged in.", ctx, username);
  final Cookie cookie = new DefaultCookie("username", username);
  cookie.setHttpOnly(true);
  cookie.setDomain("localhost");
  cookie.setMaxAge(60);
  cookie.setPath("/");
  return HttpResponse.of(
      HttpHeaders.of(HttpStatus.OK)
            .contentType(MediaType.HTML_UTF_8)
            .add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.LAX.encode(cookie)),
      HttpData.ofUtf8("<html><body onLoad=\"window.location.href='/welcome'\"></body></html>"));
}

代码示例来源:origin: line/armeria

AggregatedHttpMessage msg, String name,
  Map<String, SamlIdentityProviderConfig> idpConfigs,
  @Nullable SamlIdentityProviderConfig defaultIdpConfig) {
requireNonNull(msg, "msg");
requireNonNull(name, "name");
final T message = (T) fromDeflatedBase64(parameters.getFirstValue(name));
final MessageContext<T> messageContext = new MessageContext<>();
messageContext.setMessage(message);
  final SAMLBindingContext context = messageContext.getSubcontext(SAMLBindingContext.class, true);
  assert context != null;
  context.setRelayState(relayState);

代码示例来源:origin: line/armeria

/**
 * 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;
}

代码示例来源:origin: line/armeria

@Override
public HttpResponse serve(ServiceRequestContext ctx, AggregatedHttpMessage msg,
             String defaultHostname, SamlPortConfig portConfig) {
  try {
    final MessageContext<Response> messageContext;
    if (cfg.endpoint().bindingProtocol() == SamlBindingProtocol.HTTP_REDIRECT) {
      messageContext = HttpRedirectBindingUtil.toSamlObject(msg, SAML_RESPONSE,
                                 idpConfigs, defaultIdpConfig);
    } else {
      messageContext = HttpPostBindingUtil.toSamlObject(msg, SAML_RESPONSE);
    }
    final String endpointUri = cfg.endpoint().toUriString(portConfig.scheme().uriText(),
                               defaultHostname, portConfig.port());
    final Response response = messageContext.getMessage();
    final Assertion assertion = getValidatedAssertion(response, endpointUri);
    // Find a session index which is sent by an identity provider.
    final String sessionIndex = assertion.getAuthnStatements().stream()
                       .map(AuthnStatement::getSessionIndex)
                       .filter(Objects::nonNull)
                       .findFirst().orElse(null);
    final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
    final String relayState = bindingContext != null ? bindingContext.getRelayState() : null;
    return ssoHandler.loginSucceeded(ctx, msg, messageContext, sessionIndex, relayState);
  } catch (SamlException e) {
    return ssoHandler.loginFailed(ctx, msg, null, e);
  }
}

代码示例来源:origin: org.opensaml/opensaml-saml-api

/**
 * Get the artifact context.
 * 
 * @param requestContext the current message context
 * @return the SAML artifact context, or null
 */
@Nullable protected SAMLArtifactContext getArtifactContext(
    @Nonnull final MessageContext<SAMLObject> requestContext) {
  return requestContext.getSubcontext(SAMLArtifactContext.class);
}

代码示例来源:origin: org.opensaml/opensaml-saml-impl

/** {@inheritDoc} */
@Override
protected void setAuthenticatedState(@Nonnull final MessageContext messageContext, final boolean authenticated) {
  log.trace("Storing authenticated entity state '{}' in context: {}", authenticated, entityContextClass);
  messageContext.getSubcontext(entityContextClass, true).setAuthenticated(authenticated);
}

代码示例来源:origin: org.opensaml/opensaml-saml-impl

/** {@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;
  }
}

代码示例来源:origin: org.opensaml/opensaml-saml-api

/** {@inheritDoc} */
@Override
@Nullable public Boolean apply(@Nullable final MessageContext input) {
  
  if (input != null) {
    final AbstractAuthenticatableSAMLEntityContext entityCtx = input.getSubcontext(entityContextClass);
    if (entityCtx != null) {
      return entityCtx.isAuthenticated();
    }
  }
  
  return null;
}

代码示例来源:origin: org.opensaml/opensaml-saml-api

@Nullable public static String getIntendedDestinationEndpointURI(
    @Nonnull final MessageContext<SAMLObject> messageContext)  throws MessageException {
  final SAMLObject samlMessage = Constraint.isNotNull(messageContext.getMessage(), 
      "SAML message was not present in message context");
  String messageDestination = null;

代码示例来源:origin: org.opensaml/opensaml-saml-impl

/** {@inheritDoc} */
@Override
protected boolean doPreInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
  if (!super.doPreInvoke(messageContext) || messageContext.getMessage() == null) {
    return false;
  } else if (!SAMLBindingSupport.isMessageSigned(messageContext)) {
    log.debug("Message was not signed, cannot extract ChannelBindings from it");
    return false;
  }
  
  return true;
}

代码示例来源:origin: net.shibboleth.idp/idp-saml-impl

/** {@inheritDoc} */
@Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
  final MessageContext msgCtx = new MessageContext();
  profileRequestContext.setInboundMessageContext(msgCtx);
  final SAMLPeerEntityContext peerContext = msgCtx.getSubcontext(SAMLPeerEntityContext.class, true);
  peerContext.setEntityId(saml2Session.getId());
  log.debug("{} Initialized inbound message context for logout of {}", getLogPrefix(), saml2Session.getId());
}

代码示例来源:origin: org.opensaml/opensaml-soap-impl

/** {@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);
}

代码示例来源:origin: org.opensaml/opensaml-soap-impl

/** {@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);
}

代码示例来源:origin: org.opensaml/opensaml-saml-impl

/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
  
  final MessageContext<Response> outboundMessageCtx = profileRequestContext.getOutboundMessageContext();
  if (outboundMessageCtx == null) {
    log.debug("{} No outbound message context", getLogPrefix());
    ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_MSG_CTX);
    return false;
  } else if (!overwriteExisting && outboundMessageCtx.getMessage() != null) {
    log.debug("{} Outbound message context already contains a Response", getLogPrefix());
    ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_MSG_CTX);
    return false;
  }
  
  idGenerator = idGeneratorLookupStrategy.apply(profileRequestContext);
  if (idGenerator == null) {
    log.debug("{} No identifier generation strategy", getLogPrefix());
    ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
    return false;
  }
  
  outboundMessageCtx.setMessage(null);
  
  return super.doPreExecute(profileRequestContext);
}

代码示例来源:origin: net.shibboleth.idp/idp-cas-impl

@Override
protected Event doExecute(
    final @Nonnull RequestContext springRequestContext,
    final @Nonnull ProfileRequestContext profileRequestContext) {
  final MessageContext<SAMLObject> msgContext = new MessageContext<>();
  try {
    msgContext.setMessage(buildSamlResponse(springRequestContext, profileRequestContext));
  } catch (final IllegalStateException e) {
    return ProtocolError.IllegalState.event(this);
  }
  final SAMLBindingContext bindingContext = new SAMLBindingContext();
  bindingContext.setBindingUri(SAMLConstants.SAML1_SOAP11_BINDING_URI);
  msgContext.addSubcontext(bindingContext);
  // Ensure message uses SOAP-ENV ns prefix required by old/broken CAS clients
  final Envelope envelope = (Envelope) XMLObjectSupport.buildXMLObject(envelopeName);
  envelope.setBody((Body) XMLObjectSupport.buildXMLObject(bodyName));
  final SOAP11Context soapCtx = new SOAP11Context();
  soapCtx.setEnvelope(envelope);
  msgContext.addSubcontext(soapCtx);
  profileRequestContext.setOutboundMessageContext(msgContext);
  return ActionSupport.buildProceedEvent(this);
}

代码示例来源:origin: org.opensaml/opensaml-saml-impl

/** {@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);
}

代码示例来源:origin: line/armeria

final MessageContext<AuthnRequest> messageContext = new MessageContext<>();
  messageContext.setMessage(request);
  return new MessageContextAndIdpConfig(messageContext, idp);
}).thenCompose(arg -> {
}).thenApply(arg -> {
  final SAMLBindingContext bindingContext =
      arg.messageContext.getSubcontext(SAMLBindingContext.class);
  final String relayState = bindingContext != null ? bindingContext.getRelayState() : null;
    if (endpoint.bindingProtocol() == SamlBindingProtocol.HTTP_REDIRECT) {
      return responseWithLocation(toRedirectionUrl(
          arg.messageContext.getMessage(),
          endpoint.toUriString(), SAML_REQUEST,
          signingCredential, sp.signatureAlgorithm(),
    } else {
      final String value = toSignedBase64(
          arg.messageContext.getMessage(),
          signingCredential,
          sp.signatureAlgorithm());

代码示例来源:origin: line/armeria

final LogoutRequest logoutRequest = messageContext.getMessage();
final SamlIdentityProviderConfig idp = validateAndGetIdPConfig(logoutRequest, endpointUri);

代码示例来源:origin: org.pac4j/pac4j-saml

protected MessageContext<Pac4jSAMLResponse> prepareOutboundMessageContext(final WebContext webContext) {
  final Pac4jSAMLResponse outTransport = new DefaultPac4jSAMLResponse(webContext);
  final MessageContext<Pac4jSAMLResponse> outCtx = new MessageContext<>();
  outCtx.setMessage(outTransport);
  return outCtx;
}

代码示例来源:origin: net.shibboleth.idp/idp-profile-impl

/** {@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());
  }
}

相关文章

微信公众号

最新文章

更多