2010-02-05 3 views
0

Я пишу веб-сайт ASP, который использует защиту форм и Active Directory.WindowsIdentity.Impersonate и PostBack issue

Я позволяет пользователю войти в систему с помощью API Windows:

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

Это дает мне Войти Токен Pointer, который я не копить в переменной сеанса:

Теперь, когда я попадаю Вернемся к моей странице 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, я не уверен, имеет ли он какое-либо отношение к нему.

Пожалуйста, помогите.

ответ

0

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

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

+2

Я не уверен, что это он. Если я удалю все компоненты DevExpress и заменим их на обычные компоненты ASP.NET (gridview), все будет работать. Его DevExpress, который вызывает его. –

Смежные вопросы