我一直在尝试在java中实现WEB SSO服务提供程序。我正在使用Shibboleth身份提供商。事情正常,直到身份验证步骤,我成功地为用户创建会话/设置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>
答案 0 :(得分:2)
您启用了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>
如果您已将元数据提供程序定义为默认链接元数据提供程序的一部分,那么这应该足够了。
或者,您可以通过注释掉<:p>来关闭邮件身份验证策略
<security:Rule xsi:type="security:MandatoryMessageAuthentication"/>