我这里有一些内部的.net Web应用程序,要求用户"注销"它们.我知道这在Intranet应用程序上似乎没什么问题,但它仍然存在.
我们对Intranet应用程序使用Windows身份验证,因此我们使用基本身份验证绑定到Active Directory,并且凭据存储在浏览器缓存中,而不是使用.net表单身份验证时的cookie.
在IE6 +中,您可以通过执行以下操作来利用他们创建的特殊JavaScript函数:
document.execCommand("ClearAuthenticationCache", "false")
Run Code Online (Sandbox Code Playgroud)
但是,对于其他需要支持的浏览器(即目前的Firefox,但我力求支持多浏览器),我只是向用户显示他们需要关闭浏览器以退出应用程序的消息,有效地刷新应用程序缓存.
有人知道一些命令/黑客/等.我可以在其他浏览器中使用来刷新身份验证缓存?
我有一个ASP.NET站点,必须使用表单身份验证而不是Windows身份验证来访问ActiveDirectoryMembershipProvider.该站点必须使用表单,因为它们需要设计的输入表单,而不是Windows身份验证使用的浏览器身份验证弹出窗口.
该站点需要模拟通过Active Directory登录的用户访问用户特定文件.
但是,WindowsIdentity.GetCurrent()由于是不一样的HttpContext.Current.User.Identity,虽然我的web.config包括:
<authentication mode="Forms">
<forms loginUrl="login.aspx" timeout="480"/>
</authentication>
<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)
我无法使用LoginUser(),WindowsIdentity.Impersonate()因为我需要冒充AD用户来获取他们的特定权限,而我不知道用户的密码,因为Forms负责登录.
是否可以从login.aspx.cs获取System.Web.UI.WebControls.Login.Password,然后将LoginUser()令牌保存在会话变量中以供WindowsIdentity.Impersonate()日后使用?或者可能采用更安全的方法冒充正确的方法?
我很困惑为什么表单身份验证不能自动 <identity impersonate="true" />
我已阅读此http://msdn.microsoft.com/en-us/library/ms998351.aspx但它使用Windows身份验证.
asp.net impersonation forms-authentication active-directory windows-authentication
我希望用户能够通过HTTP基本身份验证模式登录.
问题是我还希望他们能够再次注销 - 奇怪的是,浏览器似乎并不支持.
这被认为是一种社交黑客风险 - 用户将其机器解锁并且浏览器打开,而其他人可以轻松地访问该网站.请注意,仅关闭浏览器选项卡不足以重置令牌,因此用户可能很容易错过.
所以我想出了一个解决方法,但这是一个完全的问题:
1)将它们重定向到Logoff页面
2)在该页面上激活一个脚本到ajax加载另一个带有伪凭证的页面:
$j.ajax({
url: '<%:Url.Action("LogOff401", new { id = random })%>',
type: 'POST',
username: '<%:random%>',
password: '<%:random%>',
success: function () { alert('logged off'); }
});
Run Code Online (Sandbox Code Playgroud)
3)应该总是第一次返回401(强制传递新凭据),然后只接受伪凭证:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOff401(string id)
{
// if we've been passed HTTP authorisation
string httpAuth = this.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(httpAuth) &&
httpAuth.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
{
// build the string we expect - don't allow regular users to pass
byte[] enc = Encoding.UTF8.GetBytes(id + ':' + id);
string expected …Run Code Online (Sandbox Code Playgroud) 我有一个用MVC 4编写的Intranet项目,它使用Windows身份验证来授权和验证用户.
我需要添加"以其他用户身份登录"功能.
经过一些搜索,我发现这个解决方案建议返回401,并创建了以下Action(使用表单调用):
//
// POST: /Home/LogOut
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOut()
{
return new HttpUnauthorizedResult();
}
Run Code Online (Sandbox Code Playgroud)
调用Action,浏览器会弹出用户名和密码窗口,但是当结果重定向回Action时,总会返回401.
一旦用户使用新凭据登录,如何将用户重定向回上一个操作?
有没有办法使服务器端的凭据无效,而不是只返回401?
asp.net-mvc http windows-authentication logout http-status-code-401
在我的项目中,我正在使用Windows身份验证登录.注销按钮是必需的.
如果单击注销按钮页面应重定向到Logout.aspx.在Logout.aspx中,如果我按下浏览器中的重定向后退按钮.
如何控制不应该重定向到LogOut页面并要求窗口验证登录?