我使用VS 2013创建了一个默认的MVC应用程序,并使用带有live id的Owin身份验证作为我的外部登录提供程序,但遗憾的是,它无法按照从实时ID注销用户的方式工作。我检查了许多解决方案,比如使用
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
而不是
AuthenticationManager.SignOut();
但根本没有任何作用。我偶然发现了这个部分,我将用户重定向到我的LogOff操作方法中的实时ID特定URL。
(我只是将live id身份验证作为我的外部登录提供程序,而不是其他人,但是如果你使用这种方法与多个登录提供程序,那么你需要在重定向之前检查它是否是实时id提供程序)
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return Redirect("https://login.live.com/oauth20_logout.srf?client_id=[your_client_id]&scope=wl.basic&response_type=code&redirect_uri=http://www.yourdomain.com/signin-microsoft&state=");
}
但是当您实际运行此操作并点击注销链接时,它会将您重定向回您的应用“http://www.yourdomain.com/signin-microsoft&lc=2057”,该网址显示空白页并且不会重定向到您的主页。现在要解决这个问题,我在Global.asax
中编写了下面的代码 protected void Application_BeginRequest(object sender, EventArgs e)
{
var url = Request.Url;
if(url.AbsoluteUri.Contains("signin-microsoft") && Request.QueryString["lc"] != null)
{
Response.Redirect(url.GetLeftPart(UriPartial.Authority));
}
}
我不知道这是否是目前唯一的方法..如果有更好的方法可以分享吗?