在我的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(框架)。
谢谢!答案 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()