注销 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 应用程序中创建、编辑和删除用户

注销时不会放弃会话

MVC 4 - 未找到给出 404 的注销控制器操作

ASP.NET MVC 4 表单无法注销

ASP.NET MVC 4 默认 _LoginPartial 模板注销不起作用

MVC4 应用程序“无法加载 DLL 'libmp3lame.32.dll'