我正在继续其他人的开发,我对MVC应用程序中当前的身份验证实践知之甚少。
关于身份验证的唯一设置是在应用程序的IIS配置中:
验证
使用此配置<服务器上的 ,浏览器会要求我输入登录名/密码。我输入我的网络登录。
然后,我可以使用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;会话为空,因此不执行任何操作。
那么,我如何注销才能以不同的用户身份重新登录?
(我也希望能够在本地计算机上识别用户,但我认为应该在另一个主题中询问。)
答案 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。