Олицетворение пользователя с аутентификацией форм asp.net

Я написал небольшое приложение ASP.NET 3.5, позволяющее пользователям самостоятельно обновлять выбранные атрибуты учетной записи.

Все работает нормально, когда я использую обычную аутентификацию, но поскольку представленный диалог не идеален, я хотел бы использовать аутентификацию с помощью форм, чтобы дать пользователям больше инструкций о том, как войти в систему.

Моя проблема заключается в том, что для того, чтобы пользователь мог обновить информацию о своей учетной записи, мне нужно, чтобы приложение олицетворяло их для действий по обновлению.

Я обыскал Интернет, пытаясь найти решение моей проблемы, но ничего не подходит и не работает. Я попытался установить web.config:

<identity impersonate="true">

но это, кажется, не работает. У меня также есть код C#, использующий класс WindowsImpersonationContext, но все равно не повезло.

protected void titleTextBox_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    string fieldTitle = "job title";
    string fieldName = "title";

    if (userDirectoryEntry == null)
        CaptureUserIdentity();
    try
    {
        WindowsImpersonationContext impersonationContext = userWindowsIdentity.Impersonate();
        if (String.IsNullOrEmpty(tb.Text))
            userDirectoryEntry.Properties[fieldName].Clear();
        else
            userDirectoryEntry.InvokeSet(fieldName, tb.Text);
        userDirectoryEntry.CommitChanges();
        impersonationContext.Undo();
        PostBackMessages.Add(fieldTitle, "");
    }
    catch (Exception E)
    {
        PostBackMessages.Add(fieldTitle, E.Message);
    }
}

Я также пытался использовать метод LogonUser, чтобы создать токен пользователя и выполнить аутентификацию таким образом, но он тоже не работает.

IntPtr token = IntPtr.Zero;
bool result = LogonUser(userName, domainName, passwordTB.Text, LogonSessionType.Network, LogonProvider.Default, out token);

if (result)
{
     WindowsPrincipal wp = new WindowsPrincipal(new WindowsIdentity(token));
     System.Threading.Thread.CurrentPrincipal = wp;
     HttpContext.Current.User = wp;
     if (Request.QueryString["ReturnUrl"] != null)
     {
          FormsAuthentication.RedirectFromLoginPage(usernameTB.Text, false);
     }
     else
     {
          FormsAuthentication.SetAuthCookie(usernameTB.Text, false);
     }
}

Я просто не могу не думать, что упускаю что-то невероятно простое...


person user437050    schedule 01.09.2010    source источник


Ответы (1)


Вы включили аутентификацию Windows и отключили анонимную аутентификацию в ИИС?

Если олицетворение включено в приложении ASP.NET, то:
• Если анонимный доступ включен в IIS, запрос выполняется с использованием учетной записи IUSR_machinename.
• Если анонимный доступ отключен в IIS, запрос выполняется с использованием учетная запись аутентифицированного пользователя.

person Even Mien    schedule 03.09.2010
comment
Чтобы аутентификация с помощью форм работала, я должен включить анонимную аутентификацию. Я не могу использовать проверку подлинности Windows из-за проблем с делегированием при попытке напрямую выдать себя за IIS, а обычная проверка подлинности (пока она работает) неуклюжа и неудобна для пользователя. - person user437050; 07.09.2010