繁体   English   中英

注销MVC4应用程序

[英]Logout of MVC4 application

我正在继续其他人的开发,并且我对MVC应用程序中的身份验证的当前实践了解不多。

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

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

验证:

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

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

使用相同登录名/密码登录的本地计算机上:应用程序中没有用户登录(Request.RequestContext.HttpContext.User.Identity.Name ==“”)。 如果我禁用了匿名身份验证,则浏览器将继续无限期地反复询问登录密码。

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

因此,如何注销才能以其他用户身份重新登录?

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

删除了FormsAuth注销方法,因为问题是针对Windows Auth ...哦!

更新:

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

User.Identity.Name

不好意思您使用Windows身份验证...

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

这里拍摄:

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

总而言之,如果您真的想强制进行新的登录,则也许更适合使用其他身份验证模式。”

对于仅IE的解决方法,请参见此SO帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM