我有一个使用Spring Security的应用程序,正好使用自定义身份验证提供程序。我现在需要在混合中添加SAML IDP。所以我启动并运行了示例SAML应用程序,并使用该安全上下文作为基础。我的经理定义如下:
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="myAuthenticationProvider" />
<security:authentication-provider ref="samlAuthenticationProvider"/>
</security:authentication-manager>
现在,当我使用仅在SAML IDP中的用户名/密码提交我的登录表单时,我可以从日志中看到它调用myAuthenticationProvider,然后抛出BadCredentialsException,然后什么都没有。我没有看到任何其他异常,也没有看到SAMLAuthenticationProvider。
我已经阅读了几次文档,似乎表明可以做到这一点,但我没有看到一个例子。有没有人有使用SAML和BasicAuthentication的例子?
答案 0 :(得分:0)
我认为您不需要为新IDP添加额外的身份验证提供程序。你只需要添加一个新的?在您的CachingMetadataManager Bean中。在示例应用程序中提供的securityContext.xml中:
<!-- IDP Metadata configuration - paths to metadata of IDPs in circle of trust is here -->
<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
<constructor-arg>
<list>
<!-- Example of classpath metadata with Extended Metadata -->
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
<constructor-arg>
<bean class="java.util.Timer"/>
</constructor-arg>
<constructor-arg>
<bean class="org.opensaml.util.resource.ClasspathResource">
<constructor-arg value="/metadata/idp.xml"/>
</bean>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
</bean>
</constructor-arg>
</bean>
<!-- Example of HTTP metadata without Extended Metadata -->
<bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider">
<!-- URL containing the metadata -->
<constructor-arg>
<value type="java.lang.String">http://idp.ssocircle.com/idp-meta.xml</value>
</constructor-arg>
<!-- Timeout for metadata loading in ms -->
<constructor-arg>
<value type="int">15000</value>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
<!-- Example of file system metadata without Extended Metadata -->
<bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
<constructor-arg>
<value type="java.io.File">/usr/local/metadata/idp.xml</value>
</constructor-arg>
<property name="parserPool" ref="parserPool"/>
</bean>
</list>
</constructor-arg>
</bean>
如果取消注释列表中的第二个bean,它将启用/usr/local/metadata/idp.xml
提供的xml文件中指定的另一个IDP。如果你想通过http添加另一个IDP的元数据,只需复制一个用于ssocircle并进行调整。