我写了一个小型的ASP.NET 3.5应用程序,允许用户自己更新所选账户属性。使用基本身份验证时一切正常,但由于呈现的对话框不太理想,我想使用表单身份验证来给用户更多的登录说明。我的问题是,为了让用户更新他们的账户信息,我必须让应用程序模拟他们的更新操作。我已经搜索了互联网,试图找到解决我的问题的方法,但没有任何适合或有效的方案。我尝试设置web.config:
<identity impersonate="true">
但是似乎不起作用。 我还有使用WindowsImpersonationContext类的C#代码,但仍然没有成功。
protected void titleTextBox_TextChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
string fieldTitle = "job title";
string fieldName = "title";
if (userDirectoryEntry == null)
CaptureUserIdentity();
try
{
WindowsImpersonationContext impersonationContext = userWindowsIdentity.Impersonate();
if (String.IsNullOrEmpty(tb.Text))
userDirectoryEntry.Properties[fieldName].Clear();
else
userDirectoryEntry.InvokeSet(fieldName, tb.Text);
userDirectoryEntry.CommitChanges();
impersonationContext.Undo();
PostBackMessages.Add(fieldTitle, "");
}
catch (Exception E)
{
PostBackMessages.Add(fieldTitle, E.Message);
}
}
我也尝试使用LogonUser方法创建用户令牌并通过后端进行身份验证,但这种方法也不起作用。
IntPtr token = IntPtr.Zero;
bool result = LogonUser(userName, domainName, passwordTB.Text, LogonSessionType.Network, LogonProvider.Default, out token);
if (result)
{
WindowsPrincipal wp = new WindowsPrincipal(new WindowsIdentity(token));
System.Threading.Thread.CurrentPrincipal = wp;
HttpContext.Current.User = wp;
if (Request.QueryString["ReturnUrl"] != null)
{
FormsAuthentication.RedirectFromLoginPage(usernameTB.Text, false);
}
else
{
FormsAuthentication.SetAuthCookie(usernameTB.Text, false);
}
}
我就是觉得自己可能漏掉了一些非常简单的东西...