Олицетворение пользователя с помощью аутентификации asp.net формы - PullRequest
3 голосов
/ 01 сентября 2010

Я написал небольшое приложение 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);
     }
}

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

1 Ответ

1 голос
/ 03 сентября 2010

Включили ли вы проверку подлинности Windows и отключили анонимную проверку подлинности в IIS?

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

...