3

J'ai écrit une petite application ASP.NET 3.5 pour permettre aux utilisateurs de mettre à jour eux-mêmes les attributs de compte sélectionnés.Usurpation d'identité avec l'authentification de formulaires asp.net

Tout fonctionne bien lorsque j'utilise l'authentification de base, mais parce que la boîte de dialogue qui est présenté est moins idéal, je voudrais utiliser l'authentification des formulaires pour donner aux utilisateurs plus   instructions sur la façon de se connecter.

Mon problème est que pour que l'utilisateur mette à jour ses informations de compte, je dois faire en sorte que l'application emprunte son identité pour les actions de mise à jour.

J'ai parcouru Internet en essayant de trouver une solution à mon problème, mais rien ne va ou ne fonctionne. Je l'ai essayé de placer le web.config:

<identity impersonate="true"> 

mais cela ne semble pas fonctionner. J'ai aussi le code C# en utilisant la classe WindowsImpersonationContext, mais toujours pas de chance.

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); 
    } 
} 

J'ai aussi essayé d'utiliser la méthode LogonUser pour créer un jeton et backend utilisateur l'authentification de cette façon, et il ne fonctionne pas non plus.

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); 
    } 
} 

Je ne peux pas empêcher de penser que je manque quelque chose incroyablement simple ...

Répondre

1

Avez-vous enabled Windows Authentication et désactivé l'authentification anonyme dans IIS?

Si l'usurpation d'identité est activé dans une application ASP.NET puis:
• Si l'accès anonyme est activé dans IIS, la demande est faite en utilisant le compte IUSR_nommachine.
• Si l'accès anonyme est désactivé dans IIS, la demande est effectuée à l'aide du compte de l'utilisateur authentifié.

+1

Pour que l'authentification par formulaires fonctionne, l'authentification anonyme doit être activée. Je ne peux pas utiliser l'authentification Windows en raison de problèmes de délégation lorsque j'essaie d'emprunter directement via IIS, et l'authentification de base (pendant que cela fonctionne) est maladroite et n'est pas conviviale. – user437050