gpt4 book ai didi

java - 单一注销不适用于 Shibboleth IdP

转载 作者:行者123 更新时间:2023-11-30 04:01:11 27 4
gpt4 key购买 nike

我一直在尝试用java实现WEB SSO服务提供者。我正在使用 Shibboleth 身份提供商。一切工作正常,直到身份验证步骤,我成功地为用户创建 session /设置 cookie。但是,当我尝试使用单点注销功能时,我收到来自 shibboleth IdP 的“RequestDenied”响应。我检查了日志,其中写着入站消息发行者未经过身份验证。同一发行者在登录步骤中工作正常,但在注销步骤中出现错误。任何要更新的配置文件,任何指针,建议吗?这是我的注销请求。

<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="jiojjcjckjaflbedlcjcpcnecigbjhaekalmfkcg"
IssueInstant="2014-02-24T23:30:25.257Z"
NotOnOrAfter="2014-02-24T23:35:25.257Z"
Version="2.0"
>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://localhost/sp/shibboleth</saml:Issuer>
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
NameQualifier="urn:oasis:names:tc:SAML:2.0:assertion"
>rohit</saml:NameID>
<samlp:SessionIndex/>
</samlp:LogoutRequest>

这就是我得到的回应。

<saml2p:LogoutResponse xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
Destination="https://localhost:8091/SSO/consumer"
ID="_02a145f4992cb2e11a8fc4aa43a74096"
InResponseTo="jiojjcjckjaflbedlcjcpcnecigbjhaekalmfkcg"
IssueInstant="2014-02-24T23:30:25.334Z"
Version="2.0"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
>https://localhost/shibboleth</saml2:Issuer>
<saml2p:Status>
<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestDenied" />
</saml2p:StatusCode>
<saml2p:StatusMessage>Message did not meet security requirements</saml2p:StatusMessage>
</saml2p:Status>
</saml2p:LogoutResponse>

最佳答案

您为 SLO 配置文件启用了名为“强制消息身份验证”的设置。

您通常可以在依赖方配置文件的底部找到该设置。它应该看起来像这样。

<security:SecurityPolicy id="shibboleth.SAML2SLOSecurityPolicy" xsi:type="security:SecurityPolicyType">
<security:Rule xsi:type="samlsec:Replay"/>
<security:Rule xsi:type="samlsec:IssueInstant"/>
<security:Rule xsi:type="samlsec:ProtocolWithXMLSignature" trustEngineRef="shibboleth.SignatureTrustEngine"/>
<security:Rule xsi:type="samlsec:SAML2HTTPRedirectSimpleSign" trustEngineRef="shibboleth.SignatureTrustEngine"/>
<security:Rule xsi:type="samlsec:SAML2HTTPPostSimpleSign" trustEngineRef="shibboleth.SignatureTrustEngine"/>
<security:Rule xsi:type="security:ClientCertAuth" trustEngineRef="shibboleth.CredentialTrustEngine"/>
<security:Rule xsi:type="samlsec:MandatoryIssuer"/>
<security:Rule xsi:type="security:MandatoryMessageAuthentication"/>
</security:SecurityPolicy>

强制消息身份验证将要求您设置一种方法来验证消息是否来自受信任的对等点。通常这是通过签名请求完成的。 SP 可以对其元数据进行签名并公开证书以进行验证。 Shibboleth 可以设置为信任来自 SP 的证书。

实现此目的的一种方法是在元数据提供程序中使用类似以下内容为 SP 设置元数据过滤器:

<metadata:MetadataFilter xsi:type="metadata:SignatureValidation"
trustEngineRef="shibboleth.MetadataTrustEngine"
requireSignedMetadata="true" />

这引用了一个名为 shibboleth.MetadataTrustEngine 的信任引擎。信任引擎可用于签名验证。

信任引擎也在依赖方配置中定义,因此只需查找它即可。默认设置如下所示:

<security:TrustEngine id="shibboleth.SignatureTrustEngine" xsi:type="security:SignatureChaining">
<security:TrustEngine id="shibboleth.SignatureMetadataExplicitKeyTrustEngine" xsi:type="security:MetadataExplicitKeySignature" metadataProviderRef="ShibbolethMetadata"/>
<security:TrustEngine id="shibboleth.SignatureMetadataPKIXTrustEngine" xsi:type="security:MetadataPKIXSignature" metadataProviderRef="ShibbolethMetadata"/>
</security:TrustEngine>

如果您已将元数据提供程序定义为默认链接元数据提供程序的一部分,这应该足够了。

您也可以通过注释掉消息身份验证策略来关闭:

<security:Rule xsi:type="security:MandatoryMessageAuthentication"/>

关于java - 单一注销不适用于 Shibboleth IdP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21961220/

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