Spring SAML - 如何在 SP HTTP 请求上添加自定义字段?
Posted
技术标签:
【中文标题】Spring SAML - 如何在 SP HTTP 请求上添加自定义字段?【英文标题】:Spring SAML - how to add custom fields on the SP HTTP request? 【发布时间】:2014-10-27 03:01:01 【问题描述】:我的服务提供商使用 HTTP-Post 绑定将请求发送到 IDP。我需要在表单中添加新字段。现在我正在发送“SAMLRequest”和“RelayState”,但我还需要发送“option”和“profile”,这些是我们的 IDP 所需的字段。如何使用 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 方法。以上是关于Spring SAML - 如何在 SP HTTP 请求上添加自定义字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?
在 Spring SAML 中指定 IDP 和 SP 的加密算法
使用 Spring Security saml 的 IDP 会话超时