我正在写一个使用表单安全和活动目录的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);
}
问题是:
用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。
现在我知道这段代码应该可以工作了,我已经在其他项目中使用过了。我只是错过了一些东西。
另外,我正在使用DevExpress.Web.ASPxGridView.v9.2组件,我不确定它是否与此相关。
请帮忙。