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 ...
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