我有一个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" />
我不能使用LoginUser()
和WindowsIdentity.Impersonate()
,因为我需要模拟AD用户来获得他们的特定权限,而且我不知道用户的密码,因为表单负责登录。
是否可以从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身份验证。
发布于 2009-06-30 22:24:23
如果您的用户正在使用IE,那么您可以打开网站的集成安全性,您的用户将以静默方式进行身份验证(没有登录对话框,没有登录页面)。然后,您的模拟将起作用。如果您需要针对其他浏览器,那么这可能不起作用(用户可能会看到一个登录对话框)。
您当前的模拟永远不会起作用,因为您的用户使用的不是他们的域帐户登录。你不能期望网站模仿一个没有提供凭据的用户。这将违背基本的安全原则。
发布于 2011-09-18 00:41:52
我们最近遇到了同样的问题,客户希望他们的用户可以通过AD帐户登录,然后必须使用此凭据来访问Analysis Service以及所有其他数据库。他们希望这样做,因为他们实现了一个审计系统,所有访问都必须由当前登录的帐户完成。
我们尝试了表单身份验证和模拟部分的Win32 LogonUser() API,它起作用了,但它也要求我们以纯文本的形式输入用户密码。后来,我们决定使用Windows身份验证,它节省了我们很多时间(不再使用AD身份验证,手动模拟)。当然,也没有花哨的登录页面。
发布于 2014-12-16 13:18:36
为了以防万一,而且有点晚了,我发现了一些对我有效的东西,它真的很简单,但当然只是为了测试目的……
只需使用您的用户名设置cookie即可。
//Login button. You can give whatever input to the form
protected void Login_Click(object sender, EventArgs e)
{
FormsAuthentication.SetAuthCookie("your_username", createPersistentCookie: true);
Response.Redirect("~/");
}
接受任何评论...
https://stackoverflow.com/questions/1066275
复制相似问题