Owin AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie)不适用于实时ID?解决方法

时间:2015-10-14 16:59:17

标签: asp.net-mvc owin

我使用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));
        }
    }

我不知道这是否是目前唯一的方法..如果有更好的方法可以分享吗?

0 个答案:

没有答案