2014-01-24 67 views
1

我正在继续其他人的开发,并且我对MVC应用程序中当前的认证实践知之甚少。MVC4应用程序的注销

被设置有关身份验证的唯一的东西是在应用程序的IIS配置:

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

认证:

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

利用这种配置,,浏览器会询问我的登录/密码。我输入我的网络登录名。 然后,我可以得到认同Request.RequestContext.HttpContext.User.Identity...

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

我的第一个问题是我希望能够注销服务器。 从scarse info我得到了这里和那里我已经尝试过: FormsAuthentication.SignOut(); - >什么都不做 WebMatrix.WebData.WebSecurity.Logout(); - >异常,试图访问数据库(我从VS2012模板之一得到这个,但我没想到它将适用于我的情况)。 if(this.Request.RequestContext.HttpContext.Session != null) this.Request.RequestContext.HttpContext.Session.Clear(); - > Session是空的,所以这没有任何作用。

那么,如何注销以重新登录为不同的用户呢?

(我也想能够识别本地计算机上的用户,但我认为应该在另外一个话题问。)

回答

0

删除FormsAuth注销方法的问题是为Windows身份验证.. doh!

更新:

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

User.Identity.Name 

卫生署我的坏你使用Windows身份验证...

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

here摘自:

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

总而言之,如果你真的想迫使新的登录,可能是不同的 身份验证模式可能更合适。”

对于IE唯一的解决方法见this SO post

+0

谢谢您的回复但是如果你阅读我的文章,你会发现我已经尝试了两种方法(单独和一起) – TTT

+0

@TTT事实上,你们是否一起使用它们? - 通常在MVC中使用表单身份验证,你可以按照上面的方法注销 –

+0

正如我以前的评论中提到的,我已经试过了,并且我尝试过两种方法)。 – TTT