1

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

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

我的问题是我无法从我的 Web 应用程序中注销 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?

当我单击注销时,它会返回相同的页面,而不会实际注销我。但是当我使用内部帐户时,该应用程序让我注销并返回登录页面。

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

谢谢 !

4

1 回答 1

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 以让它知道用户已经退出。有关详细信息,请参阅此主题并向下滚动到有关注销的部分。

如果您使用 VS2013 和 OWIN 身份验证中间件,您只需要获取当前 OWIN 上下文的身份验证“管理器”并调用其SignOut()方法,如下所示:

HttpContext.GetOwinContext().Authentication.SignOut()

于 2014-04-16T00:44:31.750 回答