我正在尝试将我们的ASP.NET MVC网站集成为服务提供者,以允许用户针对第三方SAML2 idP进行身份验证。我正在使用SustainSys.Saml2.Owin(2.3.0)nuget程序包。
我正在执行登录过程,但是事实证明,注销用户更加困难。
运行idP的第三方表示他们不支持注销,并且我们必须自己将用户注销我们的应用程序。他们要求我们“创建一个新会话”并“进行本地注销”。
我应该指出,由于我们无法访问idP或正在执行Web浏览器测试,而这又变得更加困难,并且idP由不会说英语的实体运营,因此所有通信和测试都通过第三方翻译进行。
他们是否真的有可能不支持注销,或者翻译中丢失了某些内容?我相信SAML2 idP由定制的公司网站中的某些Oracle代码/服务处理。
在AccountController上的注销操作如下:
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而重定向到SAML2 / Logout,那么如何确保清除客户端浏览器中的所有cookie?
在测试中,当下一个用户使用同一浏览器访问该网站时,我们的应用程序似乎知道他们尚未登录,并显示了登录选项。如果他们单击该按钮以对idP进行身份验证,则它们似乎将被带到idP,然后几乎立即弹回,被身份验证为先前的用户?我该如何阻止?
编辑:我应该注意到idP的元数据确实描述了两个SingleLogoutService,一个HTTP-POST和一个HTTP-Redirect,这使我认为它们确实支持某种注销。但是,当我将客户端重定向到〜/ Saml2 / Logout时,它会导致idP网站上出现错误页面,并且没人能告诉我原因。我没有给他们我们的公钥-他们说“不需要”。