J'ai une application où j'affiche chaque groupe Active Directory auquel appartient l'utilisateur actuel. Lorsque j'ai ma configuration de configuration comme ceci:Quand l'authentification ASP.NET se produit-elle?
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
Cela fonctionne très bien. Quand il est comme ceci:
<authentication mode="Windows"/>
<authorization>
<!--<deny users="?"/>-->
<allow users="*"/>
</authorization>
Aucun groupe n'est trouvé. Pourquoi cela fait-il une différence? Est-ce que asp.net ne s'authentifie que si nous refusons spécifiquement l'accès à des utilisateurs non authentifiés?
Si elle aide c'est ainsi que je reçois les groupes:
protected string GetUserGroups()
{
StringBuilder userGroups = new StringBuilder();
ArrayList groupMembers = new ArrayList();
DirectoryEntry root = new DirectoryEntry("LDAP://myldap/DC=nc,DC=local");
DirectorySearcher ds = new DirectorySearcher(root);
ds.Filter = String.Format("(&(samaccountname={0})(objectClass=person))", User.Identity.Name.Substring(User.Identity.Name.LastIndexOf(@"\") + 1));
ds.PropertiesToLoad.Add("memberof");
try
{
foreach (SearchResult sr in ds.FindAll())
{
foreach (string str in sr.Properties["memberof"])
{
string str2 = str.Substring(str.IndexOf("=") + 1, str.IndexOf(",") - str.IndexOf("=") - 1);
groupMembers.Add(str2);
}
}
}
catch
{
//ignore if any properties found in AD
}
return String.Join("|", (string[])groupMembers.ToArray(typeof(string)));
}
Bien que je ne puisse pas confirmer ou infirmer, il semblerait raisonnable d'optimiser l'authentification des utilisateurs lorsqu'aucune authentification n'est nécessaire. – Lazarus
Est-ce que User.Identity.Name a une valeur en cas d'échec? – Zachary
Asp.net ne nécessite pas d'authentification si vous autorisez l'accès anonyme. Vraiment, pourquoi dois-je envoyer mon nom d'utilisateur si un autre utilisateur ne le fait pas? Est-il meilleur que moi? Vous pouvez mettre un point d'arrêt dans le cas de global.asax pour vous assurer de cela. – vorrtex