注销MVC4应用程序

时间:2014-01-24 09:40:40

标签: c# asp.net-mvc-4 authentication logout

我正在继续其他人的开发,我对MVC应用程序中当前的身份验证实践知之甚少。

关于身份验证的唯一设置是在应用程序的IIS配置中:

  • .NET Authrization Rules =允许,所有用户

验证

  • 匿名身份验证:已启用
  • ASP .NET模拟:已禁用
  • Windows身份验证:已启用

使用此配置<服务器上的 ,浏览器会要求我输入登录名/密码。我输入我的网络登录。 然后,我可以使用Request.RequestContext.HttpContext.User.Identity...

识别用户

在本地计算机上我使用相同的登录名/密码登录:没有用户登录应用程序(Request.RequestContext.HttpContext.User.Identity.Name ==“”)。如果我禁用匿名身份验证,浏览器只会无限地重新请求loginpassword。

我的第一个问题是我希望能够在服务器上注销。 从我在这里和那里的稀疏信息我已经尝试过: FormsAuthentication.SignOut(); - &gt;什么也没做 WebMatrix.WebData.WebSecurity.Logout(); - &gt;例外,尝试访问数据库(我从其中一个VS2012模板获得了这个,但我认为它不适用于我的上下文)。 if(this.Request.RequestContext.HttpContext.Session != null) this.Request.RequestContext.HttpContext.Session.Clear(); - &gt;会话为空,因此不执行任何操作。

那么,我如何注销才能以不同的用户身份重新登录?

(我也希望能够在本地计算机上识别用户,但我认为应该在另一个主题中询问。)

1 个答案:

答案 0 :(得分:0)

删除FormsAuth注销方法,因为问题适用于Windows Auth ... doh!

<强>更新

要获取登录的用户名,请尝试使用IPrincipal Controller.User:

User.Identity.Name

糟透了我使用Windows身份验证...

在这种情况下,浏览器缓存凭据而不是服务器/ IIS,因此清除会话将无法实现任何目的。

取自here

“用户凭据由客户端浏览器缓存,而不是由IIS缓存 强制客户端用户再次输入凭据,您需要发送一个 适当的401状态消息以响应下一个客户端请求。 但是,这样做会违背非常合法的用户期望 Windows身份验证应该如何工作,所以你可能想要 重新考虑。当Windows用户凭据已被a接受时 服务器(通过登录对话框或IE下的自动提交 对于目标站点或区域的配置),只有在a时才会出现401 在先前提供的资源下无法访问所请求的资源 证书。在您之前的任何凭据之后发送401时 接受后,用户应该期望他们需要使用不同的凭据 从他们最初的登录。如果您期望相同的凭据,那么 应该预见到用户的困惑。

总而言之,如果您真的想强制进行新的登录,可能会有所不同 身份验证模式可能更合适。“

对于IE仅解决方法,请参阅this SO post