Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security Spring SAML安全性-两个不同ADFS服务器的多个IDP元数据配置_Spring Security_Spring Saml - Fatal编程技术网

Spring security Spring SAML安全性-两个不同ADFS服务器的多个IDP元数据配置

Spring security Spring SAML安全性-两个不同ADFS服务器的多个IDP元数据配置,spring-security,spring-saml,Spring Security,Spring Saml,是否可能有多个IDP元数据配置?如何配置它? 在我的环境中,我有两个不同的ADFS服务器,它们都有自己的Metadata.xml文件 在securityContext.xml文件中,我有以下用于选择ADFS服务器IDP的配置: <bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager"> <constructor-arg> <list>

是否可能有多个IDP元数据配置?如何配置它? 在我的环境中,我有两个不同的ADFS服务器,它们都有自己的Metadata.xml文件

在securityContext.xml文件中,我有以下用于选择ADFS服务器IDP的配置:

<bean id="metadata"
class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
<list>
<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
<constructor-arg>
<value type="java.lang.String">https://<adfs_server1>/FederationMetadata/2007-06/FederationMetadata.xml</value>
</constructor-arg>
<constructor-arg>
<value type="int">50000</value>
</constructor-arg>
<property name="parserPool" ref="parserPool" />
</bean>
</list>
</constructor-arg>
</bean>

https:///FederationMetadata/2007-06/FederationMetadata.xml
50000
是否可以为两个不同的ADFS服务器添加与上述相同的另一个条目,如:

<bean id="metadata"
class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
<list>
<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
<constructor-arg>
<value type="java.lang.String">https://<adfs_server1>/FederationMetadata/2007-06/FederationMetadata.xml</value>
</constructor-arg>
<constructor-arg>
<value type="int">50000</value>
</constructor-arg>
<property name="parserPool" ref="parserPool" />
</bean>
</list>
</constructor-arg>
</bean>
<bean id="metadata1"
class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
<list>
<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
<constructor-arg>
<value type="java.lang.String">https://<adfs_server2>/FederationMetadata/2007-06/FederationMetadata.xml</value>
</constructor-arg>
<constructor-arg>
<value type="int">50000</value>
</constructor-arg>
<property name="parserPool" ref="parserPool" />
</bean>
</list>
</constructor-arg>
</bean>

https:///FederationMetadata/2007-06/FederationMetadata.xml
50000
https:///FederationMetadata/2007-06/FederationMetadata.xml
50000

请提供帮助。

是的,您可以包含任意数量的IDP。但不是通过添加多个
CachingMetadataManager
bean,而是应该在单个
MetadataManager
中包含多个
MetadataProviders
。配置可能如下所示:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                <constructor-arg>
                    <value type="java.lang.String">https://<adfs_server1>/FederationMetadata/2007-06/FederationMetadata.xml</value>
                </constructor-arg>
                <constructor-arg>
                    <value type="int">50000</value>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
            <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
                <constructor-arg>
                    <value type="java.lang.String">https://<adfs_server2>/FederationMetadata/2007-06/FederationMetadata.xml</value>
                </constructor-arg>
                <constructor-arg>
                    <value type="int">50000</value>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

https:///FederationMetadata/2007-06/FederationMetadata.xml
50000
https:///FederationMetadata/2007-06/FederationMetadata.xml
50000

您需要提供一种机制来确定当用户想要进行身份验证时应该使用哪种IDP。您可以通过在调用
/saml/login
端点时使用所选idp的
entityId
值指定GET参数
idp
,或者通过实现idp发现来实现此操作。

谢谢Vladimir。我昨天就试过了,效果很好。再次感谢。@kannan您在github上有代码吗?我不知道如何调用正确的IDP。我想根据他们访问的url调用一个特定的idp。可以有两个不同的url吗?例如,为外部用户使用代理。外部URL指向IDP A,内部URL指向IDP B。实体ID是否必须与应用程序URL匹配?是否有两个不同的URL?例如,为外部用户使用代理。外部URL指向IDP A,内部URL指向IDP B。@DotBatch您找到您的评论的答案了吗?@theLearner是的,我必须编写大量自定义代码才能正常工作。是的,Dotbatch,你能给我一些指导或者分享一些片段吗?