WindowsIdentity.Impersonate和PostBack问题

时间:2010-02-05 23:49:28

标签: security postback devexpress impersonation aspxgridview

我正在编写一个使用Forms安全性和Active Directory的ASP网站。

我允许用户使用Windows API登录:

[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

这给了我一个登录令牌指针,我将其保存在会话变量中:

bool returnValue = LogonUser(txtUserName.Text, domainName, txtPassword.Text, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref TokenHandle);

    if (!returnValue)
    {
           lblErrorMessage.Text = "Incorrect Username or Password";
           lblErrorMessage.Visible = true;
            return;
    }
    Session["TokenHandle"] = TokenHandle;

现在,当我被重定向回我的Default.aspx页面时,我想模拟已登录的用户。这样我就不必硬编码SQL连接字符串用户名,我只能使用集成安全性。我在页面加载上执行此操作,如下所示:

if (Session["TokenHandle"] != null)
            {
                IntPtr tokenHandle = new IntPtr(0);
                tokenHandle = (IntPtr)Session["TokenHandle"];
                WindowsIdentity.Impersonate(tokenHandle);
            }

以下是问题:

我第一次点击Default.aspx时效果很好但是一旦我做了回发就会失去模仿而我收到错误:

用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败。

现在我知道这段代码应该可以使用,我已经在其他项目中使用过了。我在这里错过了一些东西。

我也在使用DevExpress.Web.ASPxGridView.v9.2组件,我不确定它是否与它有任何关系。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您将遇到的问题是,运行您网站的应用程序池不受委托信任,因此无法模拟AD用户帐户。在AD中,您需要手动允许委派给运行应用程序池的域用户。

然后你就可以冒充用户了。