gpt4 book ai didi

java - 如何从 IdP 元数据为 SP 创建 keystore

转载 作者:行者123 更新时间:2023-12-02 04:51:56 25 4
gpt4 key购买 nike

我正在努力使用 IdP 设置我的 SP。他们给了我他们的元数据的链接。我能够使 SAML 示例应用程序正常运行。我将示例元数据与 IdP 的元数据进行了切换,但签名证书似乎存在问题。

我尝试创建自己的 keystore 并从 IdP 的元数据文件导入 x509 证书数据,但收到一条错误消息,指出我的签名错误。我还尝试直接从证书文件创建 keystore ,但收到错误消息,指出缺少私钥。

我没有直接从 IdP 获得任何 key 或证书文件,他们告诉我,我需要的所有数据都在元数据文件中。

这是我的 context.xml 文件中的 keyManager bean:

    <bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="file:F:/Certificates/PESTestKeystore.jks"/>
<constructor-arg type="java.lang.String" value="changeit"/>
<constructor-arg>
<map>
<entry key="dagtestkeystore" value="changeit"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="dagtestkeystore"/>
</bean>

我的元数据生成器我知道它需要 sha256。最初我没有指定,并且收到一个错误,指出我使用的是 sha1,但 IdP 期望使用 sha256:

    <bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter">
<constructor-arg>
<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
<property name="entityId" value="urn:test:dag:dagtest"/>
<property name="extendedMetadata">
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="signMetadata" value="true"/>
<property name="signingKey" value="dagtestkeystore"/>
<property name="signingAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
</bean>
</property>
</bean>
</constructor-arg>
</bean>

这是我收到的错误消息:

Encountered error during federation passive request. 

Additional Data

Protocol Name:
Saml

Relying Party:
urn:test:dag:dagtest

Exception details:
Microsoft.IdentityModel.Protocols.XmlSignature.SignatureVerificationFailedException: MSIS0038: SAML Message has wrong signature. Issuer: 'urn:test:dag:dagtest'.
at Microsoft.IdentityServer.Protocols.Saml.Contract.SamlContractUtility.CreateSamlMessage(MSISSamlBindingMessage message)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.Issue(HttpSamlRequestMessage httpSamlRequestMessage, SecurityTokenElement onBehalfOf, String sessionState, String relayState, String& newSamlSession, String& samlpAuthenticationProvider, Boolean isUrlTranslationNeeded, WrappedHttpListenerContext context, Boolean isKmsiRequested)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.RequestBearerToken(WrappedHttpListenerContext context, HttpSamlRequestMessage httpSamlRequest, SecurityTokenElement onBehalfOf, String relyingPartyIdentifier, Boolean isKmsiRequested, Boolean isApplicationProxyTokenRequired, String& samlpSessionState, String& samlpAuthenticationProvider)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.BuildSignInResponseCoreWithSerializedToken(HttpSamlRequestMessage httpSamlRequest, WrappedHttpListenerContext context, String relyingPartyIdentifier, SecurityTokenElement signOnTokenElement, Boolean isKmsiRequested, Boolean isApplicationProxyTokenRequired)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.BuildSignInResponseCoreWithSecurityToken(SamlSignInContext context, SecurityToken securityToken, SecurityToken deviceSecurityToken)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.Process(ProtocolContext context)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.ProcessProtocolRequest(ProtocolContext protocolContext, PassiveProtocolHandler protocolHandler)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)

最佳答案

SAML AuthnRequest 的签名是使用 SP 的私钥执行的。随 SAML IdP 元数据提供的证书中包含的公钥仅用于验证 IdP 发送的断言/SAML 响应的签名。

关于java - 如何从 IdP 元数据为 SP 创建 keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432409/

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