【问题标题】:Spring SAML - how to add custom fields on the SP HTTP request?Spring SAML - 如何在 SP HTTP 请求上添加自定义字段?
【发布时间】:2014-10-27 03:01:01
【问题描述】:

我的服务提供商使用 HTTP-Post 绑定将请求发送到 IDP。我需要在表单中添加新字段。现在我正在发送“SAMLRequest”和“RelayState”,但我还需要发送“option”和“profile”,这些是我们的 IDP 所需的字段。如何使用 Spring Saml 安全性来实现这一点?

【问题讨论】:

    标签: spring spring-security saml spring-saml


    【解决方案1】:

    您可以在 SAML AuthnRequest 消息的 Extensions 元素中包含其他字段。为此,您需要覆盖类WebSSOProfileImpl 并在securityContext.xml 中配置新的实现类。 Extensions 元素可以这样构造:

    package example;
    
    import org.opensaml.common.SAMLException;
    import org.opensaml.saml2.common.Extensions;
    import org.opensaml.saml2.common.impl.ExtensionsBuilder;
    import org.opensaml.saml2.core.AuthnRequest;
    import org.opensaml.saml2.metadata.AssertionConsumerService;
    import org.opensaml.saml2.metadata.SingleSignOnService;
    import org.opensaml.saml2.metadata.provider.MetadataProviderException;
    import org.opensaml.xml.schema.XSAny;
    import org.opensaml.xml.schema.impl.XSAnyBuilder;
    import org.springframework.security.saml.context.SAMLMessageContext;
    import org.springframework.security.saml.metadata.MetadataManager;
    import org.springframework.security.saml.processor.SAMLProcessor;
    import org.springframework.security.saml.websso.WebSSOProfileImpl;
    import org.springframework.security.saml.websso.WebSSOProfileOptions;
    
    /**
     * Customization of the AuthnRequest generation.
     */
    public class WebSSOProfile extends WebSSOProfileImpl {
    
        public WebSSOProfile() {
        }
    
        public WebSSOProfile(SAMLProcessor processor, MetadataManager manager) {
            super(processor, manager);
        }
    
        @Override
        protected AuthnRequest getAuthnRequest(SAMLMessageContext context, WebSSOProfileOptions options, AssertionConsumerService assertionConsumer, SingleSignOnService bindingService) throws SAMLException, MetadataProviderException {
            AuthnRequest authnRequest = super.getAuthnRequest(context, options, assertionConsumer, bindingService);
            authnRequest.setExtensions(buildExtensions());
            return authnRequest;
        }
    
        protected Extensions buildExtensions() {
    
            XSAny extraElement = new XSAnyBuilder().buildObject("urn:myexample:extraAttribute", "ExtraElement", "myexample");
            extraElement.setTextContent("extraValue");
    
            Extensions extensions = new ExtensionsBuilder().buildObject();
            extensions.getUnknownXMLObjects().add(extraElement);
    
            return extensions;
    
        }
    
    }
    

    【讨论】:

    • 知道如何在 Grails 应用程序中执行此操作吗?我需要重写 WebSSOProfileImpl.buildReturnAddress 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2015-09-27
    • 2020-06-11
    • 2013-03-05
    • 2015-05-29
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多