没有ACS的MVC AZURE WA AD Singout

时间:2014-04-15 23:22:39

标签: asp.net-mvc-4 azure azure-active-directory logoff

在我的MVC网络应用程序中,我尝试使用内部身份验证和Windows Azure Active Directory(无ACS)作为身份提供程序。我可以将此应用程序添加到Azure应用程序,以便用户可以从azure进行身份验证。

我能够使用Azure和没有ACS的本地用户登录。

我的问题是我无法从我的网络应用程序注销Azure用户。通过单击注销来注销本地用户,但问题出在azure帐户上。我刚刚使用默认的简单MVC示例应用程序来测试这些并在这里做了一些修改,但没有什么重大的。

        [HttpPost]
   // [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        Session.Clear();
        Session.Abandon(); 
        WebSecurity.Logout();
        FormsAuthentication.SignOut();
        return RedirectToAction("Login", "Account");
    }

这是我用来注销的代码。在我看来,我还遇到了伪造令牌的问题。添加@ Html.AntiForgeryToken()对我没有帮助。

我的实际代码只是 -

      [HttpPost]
   // [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        WebSecurity.Logout();
        return RedirectToAction("Login", "Account");
    }

但基于我在一些博客中发现的一些建议,我将其改为前者。

如何退出/注销azure用户?我能否删除任何可以帮助我解决这个问题的cookie?

当我点击Logoff时,它会返回同一页面而不会实际登出我。但是当我使用内部帐户时,该应用程序允许我注销并返回登录页面。

我使用VS2012并使用身份和访问工具将其连接到Azure AD,使用WS-Federation(协议)和Windows Identity Foundation(WIF)4.5(框架)。

谢谢!

1 个答案:

答案 0 :(得分:1)

答案取决于您用于登录Azure AD的协议和身份中间件/框架。如果您在VS2012中构建了应用程序并使用Identity and Access工具将其连接到Azure AD,那么您可能正在使用WS-Federation(协议)和Windows Identity Foundation(WIF)4.5(框架)。如果您正在使用VS2013并单击“更改身份验证”,则同样适用。创建新的Web应用程序时按钮,然后登录到Azure AD目录。对于这些场景,您应该知道WIF使用HTTP模块来处理WS-Fed和会话管理,您需要与会话模块交互以结束用户的会话并将其注销。要仅从应用程序中签出用户(清除其联合身份验证cookie),您需要在会话模块上调用SignOut()方法,如下所示:

FederatedAuthentication.SessionAuthenticationModule.SignOut();

如果您希望单点注销,即用户在当前使用Azure AD登录的所有应用程序中签名,则WS-Federation有自己的注销流程,其中涉及发送特定的注销消息返回Azure AD以告知用户已注销。 See this topic了解更多信息,然后向下滚动到有关退出的部分。

如果您使用的是VS2013和OWIN身份验证中间件,则只需获取当前OWIN上下文的身份验证" manager"并调用其SignOut()方法,如图所示:

HttpContext.GetOwinContext().Authentication.SignOut()