注销 MVC4 应用程序
Posted
技术标签:
【中文标题】注销 MVC4 应用程序【英文标题】:Logout of MVC4 application 【发布时间】:2014-02-15 05:49:44 【问题描述】:我正在继续其他人的开发,但我对当前 MVC 应用程序中的身份验证实践知之甚少。
关于身份验证的唯一设置是在应用程序的 IIS 配置中:
.NET 授权规则 = 允许,所有用户身份验证:
匿名身份验证:已启用 ASP .NET 模拟:已禁用 Windows 身份验证:已启用使用此配置,在服务器上,浏览器会要求我输入登录名/密码。我输入我的网络登录名。
然后我可以用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();
--> 会话为空,所以什么都不做。
那么,我如何注销才能以其他用户身份重新登录?
(我也希望能够在本地计算机上识别用户,但我认为这应该在另一个主题中提出。)
【问题讨论】:
【参考方案1】:删除了 FormsAuth 注销方法,因为问题是针对 Windows 身份验证的... doh!
更新:
要获取登录用户名,请尝试 IPrincipal Controller.User:
User.Identity.Name
你使用 Windows 身份验证真是太糟糕了...
在这种情况下,缓存凭据的是浏览器而不是服务器/IIS,因此清除会话不会有任何效果。
取自here:
“用户凭据由客户端浏览器缓存,而不是由 IIS。 强制客户端用户再次输入凭据,您需要发送一个 相应的 401 状态消息以响应下一个客户端请求。 但是,这样做会违背非常合理的用户期望 Windows 身份验证应该如何工作,因此您可能想要 重新考虑。当 Windows 用户凭据已被 服务器(通过登录对话框或在 IE 下自动提交 目标站点或区域的配置),仅在以下情况下才需要 401 在先前提供的情况下无法访问请求的资源 证书。当您在任何凭据之前发送 401 时 接受,用户应该期望他们需要使用不同的凭据 从他们最初的登录开始。如果您期望相同的凭据,那么 应该预料到用户的困惑。
总而言之,如果你真的想强制重新登录,也许是不同的 身份验证模式可能更合适。”
对于仅 IE 的解决方法,请参阅 this SO post。
【讨论】:
感谢您的回复,但如果您阅读我的帖子,您会发现我已经尝试过(单独和一起)。 @TTT 确实,但是您是否同时使用了它们? - 通常在具有表单身份验证的 MVC 中,您将按照上述方法注销。 正如我之前的评论中提到的那样,我已经单独尝试过,并且我已经同时尝试过)。以上是关于注销 MVC4 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
当我注销并单击浏览器后退按钮时,我仍然可以在 MVC4 应用程序中创建、编辑和删除用户