3

Я написал небольшое приложение ASP.NET 3.5, чтобы пользователи могли самостоятельно обновлять выбранные атрибуты аккаунта.Пользовательское олицетворение аутентификации форм asp.net

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

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

Я искал интернет, пытаясь найти решение моей проблемы, но ничего не подходит или не работает. Я попытался установить 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); 
    } 
} 

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

ответ

1

У вас enabled Windows Authentication и инвалидов анонимной проверки подлинности в IIS?

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

+1

Для проверки подлинности форм я должен включить анонимную аутентификацию. Я не могу использовать проверку подлинности Windows из-за проблем с делегацией при попытке напрямую выдавать себя за помощью через IIS, а базовая аутентификация (хотя она работает) неудобна и не удобна для пользователя. – user437050

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