spring - 使用 Spring SAML -SP 元数据与 IDP 元数据进行 ADFS 集成?

标签 spring spring-security metadata adfs spring-saml

我使用 ssocircle 实现了 Spring SAML 示例应用程序,并且运行良好。现在我一直在尝试为客户的ADFS实现它。以下是我认为需要的配置,如有错误请指正:

  1. 将下面的第一个参数更改为客户端提供的 federationMetadata.xml 网址
<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
    <constructor-arg>
        <value type="java.lang.String">http://idp.ssocircle.com/idp-meta.xml</value>
    </constructor-arg>
    <constructor-arg>
        <value type="int">5000</value>
    </constructor-arg>
    <property name="parserPool" ref="parserPool"/>
</bean>
  • 替换下面 SP 元数据的实体 ID:
  • <bean class="org.springframework.security.saml.metadata.MetadataGenerator">
        <property name="entityId" value="replaceWithUniqueIdentifier"/>
        <property name="extendedMetadata">
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                <property name="signMetadata" value="false"/>
                <property name="idpDiscoveryEnabled" value="true"/>
            </bean>
        </property>
    </bean>
    

    我无法弄清楚以下内容:

    • 我收到的只是 adfs/../federationMetadata.xml 的网址,谁应该创建 SP 元数据?
    • 我是否应该创建 SP 元数据并提供给客户端,以将其添加到 adfs 中?因为,这就是我使用示例应用程序所做的。我将生成的元数据添加到 ssocircle
    • 我的理解是,第 1 点是 adfs url,第 2 点是 SP 实体 ID,对吗?

    如果您能向我澄清上述内容,我将不胜感激,如果可能的话,请向我指出简单的教程,该教程有助于将 SAML 与启用 Spring 安全性的应用程序集成,因为我还没有找到相同的教程。

    非常感谢

    最佳答案

    要使 SPIdP (ADFS) 之间的 SAML 正常工作,您必须相互交换元数据。

    ADFS 元数据可通过 URL https://adfs-host/FederationMetadata/2007-06/FederationMetadata.xml 获取。您可以使用 HTTPMetadataProvider 在您的 SP 中注册它们,或者使用 ResourceBackedMetadataProvider 下载它们并从类路径或文件系统中读取它们。

    对于SP元数据,您必须配置MetadataGenerator(正如您在问题中所提到的那样),然后通过FilterChainProxy公开它。下面是一个 Java 配置(与 XML 等效):

    @Bean
    public FilterChainProxy samlFilter() throws Exception {
        List<SecurityFilterChain> chains = new ArrayList<SecurityFilterChain>();
    
        chains.add(new DefaultSecurityFilterChain(
            new AntPathRequestMatcher("/saml/metadata/**"), metadataDisplayFilter()));
    
        return new FilterChainProxy(chains);
    }
    

    然后,您可以访问 URL https://sp-host/saml/metadata 上的 SP 元数据并将它们在 ADFS 上注册为依赖方信任。同样,您可以通过 URL 或从(下载的)文件导入数据来执行此操作。

    基本上,如果您遵循Spring Security SAML,应该没问题 Reference Documentation它使用 XML 配置。如果您需要切换到 Java 配置,您可以找到方便的引用 vdenotaris/spring-boot-security-saml-sample ,或者我的工作原型(prototype) sw-samuraj/blog-spring-security .

    关于spring - 使用 Spring SAML -SP 元数据与 IDP 元数据进行 ADFS 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827628/

    相关文章:

    java - "Powershell"- 使用 OpenJDK 启动 Docker 容器时出错 :Windowsservercore

    java - 如何使用retrofit2进行GET请求?

    java - 我自己的 Maven 插件如何获取 Maven Artifact 的可用版本?

    php - 将自定义元数据添加到 Woocommerce 3 中的管理订单编辑页面

    spring - 使用 Spring Boot 实现 JsonApi

    spring - 如何在 spring 中使用配置文件指定外部 application.yml

    java - Spring-MVC:JSP <form action> View 将一系列值发送到 Controller ,而不是单击按钮的一个值

    spring - 为 Oauth2 Spring Boot 创建自定义 OpenId 提供程序

    grails - Grails Spring-Security-Core插件

    ffmpeg - 使用 youtube-dl 将元数据(艺术家姓名、歌曲名称、年份、专辑、时长、流派)写入 mp3/m4a 音频文件(随后的 AtomicParsely 错误)