使用asp.net表单身份验证进行用户模拟

4
我写了一个小型的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);
     }
}

我就是觉得自己可能漏掉了一些非常简单的东西...

1个回答

1

您是否已经启用了Windows身份验证并在IIS中禁用了匿名身份验证?

如果在ASP.NET应用程序中启用了模拟,则:
• 如果在IIS中启用了匿名访问,则使用IUSR_machinename帐户发出请求。
• 如果在IIS中禁用了匿名访问,则使用已认证用户的帐户发出请求。


1
为了让表单身份验证正常工作,我必须启用匿名身份验证。我无法使用Windows身份验证,因为在尝试通过IIS直接模拟时存在委派问题,而基本身份验证(虽然可以工作)则不够灵活和用户友好。 - user437050

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接