我使用ssocircle实现了Spring SAML示例应用程序,它工作正常。现在我一直在尝试为客户端的ADFS实现它。以下是我认为需要的配置,如果我错了,请纠正我:
<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>
<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>
我无法弄清楚以下内容:
如果你能向我澄清上述内容,我也将不胜感激,如果可能的话,请指出直接的教程,有助于将SAML与Spring安全启用的应用程序集成,因为我无法找到相同的内容。
非常感谢
答案 0 :(得分:0)
要在 SP 和 IdP (ADFS)之间进行 SAML ,您必须相互交换元数据。
ADFS 元数据位于网址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);
}
然后,您可以访问网址https://sp-host/saml/metadata上的 SP 元数据,并将其作为依赖方信任注册在 ADFS 上。同样,您可以通过URL或从(下载的)文件导入数据来执行此操作。
基本上,如果你遵循使用XML配置的 Spring Security SAML Reference Documentation,你应该没问题。如果您需要切换到Java配置,您可以找到方便的vdenotaris/spring-boot-security-saml-sample或我的工作原型sw-samuraj/blog-spring-security。