我是SAML 2.0的新手,但我的任务是使用Spring Security 4.2.2和Spring Security Saml2 1.0.2将其集成到我们现有的Web应用程序中。
使用Okta作为IdP时,我们的初步测试很顺利。
但是,一位客户无法在重定向中处理SAMLRequest,因为签名算法默认为http://www.w3.org/2000/09/xmldsig#dsa-sha1,但他们不支持。
因此我需要将其更改为他们支持的内容(例如RSA-SHA256)。 如何更改转发到IdP时使用的签名算法? 所有人都非常感谢!
我已经尝试在metadataGeneratorFilter中更改defaultMetadata的signingAlgorithm属性,但这并没有改变SAMLRequest的任何内容:
@ECHO OFF
setlocal enabledelayedexpansion
for %%I in (%*) do (
set /a mod = %%I %% 3
if !mod! equ 0 echo %%I
)
更新1 :我发现我们使用的密钥库将签名算法设置为DSA,因此我使用正确的参数生成了一个新的密钥库
<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
<property name="entityBaseURL" value="..." />
<property name="extendedMetadata">
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="signingAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
</bean>
</property>
</bean>
</constructor-arg>
</bean>
这实现了SigAlg参数现在设置为RSA_SHA1(即使我的密钥库使用RSA_SHA256,但在UPDATE2中使用更多)
UPDATE 2 :看来OpenSaml,更具体地说是xmltooling,默认为RSA_SHA1。我在这里找到了一个解决方法:https://myshittycode.com/2016/02/23/spring-security-saml-replacing-sha-1-with-sha-256-on-signature-and-digest-algorithms/
现在我的实施很乐意使用RSA_SHA256(yay)
我仍然会看看我们是否可以在没有自定义引导类的情况下完成同样的事情,但至少现在一切正常。