1

我正在尝试将我们的 ASP.NET MVC 网站集成为服务提供商,以允许用户针对第三方 SAML2 idP 进行身份验证。我正在使用 SustainSys.Saml2.Owin (2.3.0) nuget 包。

我的登录过程正常工作,但事实证明注销用户更加困难。

运行 idP 的第三方说他们不支持注销,我们必须自己将用户从我们的应用程序中注销。他们要求我们“创建一个新会话”并“进行本地注销”。

我应该指出的是,由于我们无法访问 idP 或正在进行 Web 浏览器测试,并且 idP 由不会说英语的实体运行,因此所有通信和测试通过第三方翻译...

他们真的有可能不支持注销,还是在翻译中丢失了一些东西?我相信 SAML2 idP 是由定制公司网站中的一些 Oracle 代码/服务处理的。

我们 AccountController 上的 Logout 操作如下:

public ActionResult LogOff()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["SAML.Enabled"] == "false")
            {
                AuthenticationManager.SignOut();
                return RedirectToAction("Index", "Home");
            }
            else
            {
                // Having SAML2 enabled doesn't mean the user was logged in via SAML, but this seems to
                // handle that case and do the logout properly
                return Redirect("~/SAML2/Logout");
            }
        }

如果我实际上不应该重定向到 SAML2/Logout,因为他们声称他们不支持它,我如何确保清除客户端浏览器中的任何 cookie?

在测试中,当下一个用户在同一个浏览器中访问该站点时,我们的应用程序似乎知道他们没有登录,并显示登录选项。如果他们单击按钮向 idP 进行身份验证,他们似乎被带到了 idP,然后几乎立即反弹回来,以之前的用户身份进行身份验证?我该如何阻止它?

编辑:我应该注意,idP 的元数据确实描述了两个 SingleLogoutService,一个 HTTP-POST 和一个 HTTP-Redirect,这让我认为它们确实支持某种注销。但是当我将客户端重定向到 ~/Saml2/Logout 时,会导致 idP 网站上出现错误页面,没有人能告诉我原因。我没有给他们我们的公钥——他们说“不是必需的”。

4

0 回答 0