gpt4 book ai didi

spring-security - Spring Security SAML-无法验证签名

转载 作者:行者123 更新时间:2023-12-04 03:59:19 24 4
gpt4 key购买 nike

我正在Tomcat 7上使用Spring Security SAML 2.0示例Web应用程序,并对其进行了修改,以尝试使其针对Ping身份服务进行身份验证。 Web应用程序正在与服务进行通信,并且正在发送回断言,但是在尝试验证签名时失败,如下面的调试输出所示:

- Attempting to verify signature and establish trust using KeyInfo-derived credentials
- Signature contained no KeyInfo element, could not resolve verification credentials
- Failed to verify signature and/or establish trust using any KeyInfo-derived credentials
- Attempting to verify signature using trusted credentials
- Failed to verify signature using either KeyInfo-derived or directly trusted credentials
- Validation of received assertion failed, assertion will be skipped
org.opensaml.xml.validation.ValidationException: Signature is not trusted or invalid

我了解它无法验证签名,并且Ping Identity管理员已给我颁发了证书供使用,但我不确定如何将其包含在应用程序中。我尝试使用JDK的keytool程序将其添加到示例应用程序随附的JKS( keystore )中,但似乎无法在其中找到它。我还尝试过将其添加到服务提供商的元数据xml文件中,如下所示:
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
[Certificate is here...]
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>

但是,它仍然返回相同的错误。

我应该在特定位置放置证书以验证签名吗?一般来说,我对SAML和应用程序安全性还比较陌生,因此如果使用了错误的术语,我深表歉意。

最佳答案

终于让它起作用了。原来,我错过了安全上下文文件中的配置行,并且(似乎)在服务提供商的元数据XML文件中不需要X509证书定义。

基本上,我已经将提供给我的公钥导入到现有的JKS中(使用keytool),但是我没有告诉应用程序专门使用它。为此,我必须进入安全上下文文件(在本例中为“securityContext.xml”),并将以下行添加到SP的元数据xml文件的ExtendedMetadata bean定义中:

<property name="signingKey" value="[alias of the provided key in the JKS goes here]"/>

因此,在进行此修改之后, ExtendedMetadataDelegate bean定义如下所示:
<bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
<constructor-arg>
<bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
<constructor-arg>
<value type="java.io.File">classpath:security/[Path to SP metadata xml file].xml</value>
</constructor-arg>
<property name="parserPool" ref="parserPool" />
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="alias" value="[SP alias goes here]" />
<property name="signingKey" value="[alias of the provided key in the JKS goes here]"/>
</bean>
</constructor-arg>
</bean>

希望这对可能处于类似情况的人有所帮助。

关于spring-security - Spring Security SAML-无法验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com