1

我在实施单点注销方面需要帮助。我能够成功实施 SSO 服务。但 SLO 服务无法正常工作。在基于 OWIN 的 asp.net MVC 应用程序上执行注销后,我得到了 RequestDenied 状态代码。

<saml2p:LogoutRequest
Destination="https://sap-client.accounts.ondemand.com/saml2/idp/slo/sap-client.accounts.ondemand.com"
ID="idb2d655f7174f465696a433c75a717b46" IssueInstant="2019-08-03T02:16:03Z" Version="2.0"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
<saml2:Issuer>https://sp.domain.com/Saml2</saml2:Issuer>
<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">xxx@xxx.com</saml2:NameID>
<saml2p:SessionIndex>S-SP-6aff8686-a642-4381-8ab3-0f18c6815ffe</saml2p:SessionIndex>

<LogoutResponse Destination="https://sp.domain.com/Saml2/Logout" ID="S0e6a2f99-2517-4326-a8ce-2ede2dfe1bfa" InResponseTo="idb2d655f7174f465696a433c75a717b46" IssueInstant="2019-08-03T02:16:04.933Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:ns2="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ns4="http://www.w3.org/2001/04/xmlenc#" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#">
<ns2:Issuer>sap-client.accounts.ondemand.com</ns2:Issuer>
<Status>
    <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
        <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestDenied" />
    </StatusCode>
    <StatusMessage>Identity Provider could not process the logout message received.</StatusMessage>
</Status>

这是Owin日志

Sustainsys.Saml2.Owin.Saml2AuthenticationMiddleware Error: 0 : Error in Saml2 for /Saml2/Logout Sustainsys.Saml2.Exceptions.UnsuccessfulSamlOperationException: Idp返回状态“Requester”,表示单次注销失败。本地会话已​​成功终止。在 Sustainsys.Saml2.WebSso.LogoutCommand.Run(HttpRequestData request, String returnPath, IOptions options) 在 Sustainsys.Saml2.WebSso.LogoutCommand.HandleResponse(UnbindResult unbindResult, StoredRequestState storedRequestState, IOptions options, Uri returnUrl)。 Saml2AuthenticationHandler.d__4.MoveNext() ProcessId=14888 DateTime=2019-08-04T06:16:22.3060366Z

在此处输入图像描述

先感谢您。

4

1 回答 1

1

Idp 返回错误。您应该检查 Idp 上的日志以获取有关原因的更多信息。也可能值得使用 Chrome 的 SAML 开发工具来检查实际消息,响应中可能嵌入了更多状态代码。

可能发生这种情况的一个原因是,如果您的应用程序中有一个长期存在的会话,该会话超出了 Idp 会话的生命周期。对于通常将外部登录会话交换到应用程序登录会话的基于 owin 的应用程序,这可能会发生 - 在 ExternalLoginCallback 中完成的交换中会丢失会话生命周期限制。

于 2019-08-06T15:49:33.553 回答