フォーム セキュリティと Active Directory を使用する ASP Web サイトを作成しています。
ユーザーが 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 コンポーネントを使用していますが、それと関係があるかどうかはわかりません。
助けてください。