WindowsIdentity.Impersonate и PostBack проблема - PullRequest
0 голосов
/ 06 февраля 2010

Я пишу веб-сайт ASP, использующий безопасность форм и Active Directory.

Я разрешаю пользователю войти в систему с помощью 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 голосов
/ 10 марта 2010

Проблема, с которой вы столкнетесь, заключается в том, что пул приложений, на котором работает ваш сайт, не является доверенным для делегирования, поэтому НЕ МОЖЕТ выдавать себя за учетную запись пользователя AD. В AD необходимо вручную разрешить делегирование Пользователю домена, работающему с Пулом приложений.

Тогда вы сможете выдать себя за пользователя.

...