Devo accedere ad Active Directory per ottenere informazioni sui gruppi a cui appartengono i clienti. Il progetto che ho è un'applicazione ASP.Net MVC che utilizza C#. Non ho mai programmato prima Active Directory e ho bisogno di qualche consiglio su quale sia il modo migliore per iniziare, quale modello di sicurezza usare per accedere alle informazioni e magari indirizzarmi ad alcuni buoni tutorial.Accesso ad Active Directory da ASP.Net MVC tramite C#
risposta
Dal momento che si sta utilizzando MVC, si ha accesso alla nuova System.DirectoryServices.AccountManagement spazio dei nomi in .NET 3.5. Queste classi dovrebbero essere preferite rispetto alle classi precedenti in DirectoryServices in quanto sono molto più semplici da usare. Ci sono un paio di trucchi che non sono stati risolti in 3.5 (limite di 1500 membri quando si interrogano gruppi, ad esempio), ma sono certo che questi sono stati risolti in .NET 4.0. Per la maggior parte delle attività, le nuove classi funzionano molto bene.
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.FindByIdentity(context, "username"))
{
var groups = user.GetAuthorizationGroups();
...
}
}
Utilizzare lo spazio dei nomi System.DirectoryServices
per accedere all'AD.
Le due classi più importanti sono:
Supponiamo che il dominio è: MyIntranet.MyCompany.com
Poi, si dovrà creare un'istanza radice della classe DirectoryEntry
:
DirectoryEntry root = new DirectoryEntry("LDAP://DC=MyIntranet,DC=MyCompany,DC=com");
Durante la ricerca l'AD per un evento particolare di un gruppo o utente:
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = root;
searcher.SearchScope = SearchScope.Subtree;
Diciamo che si desidera cercare un nome utente di nome: AnyUser1, il DirectorySearcher.Filter dovrebbe essere simile:
searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})", "AnyUser1");
Quindi, ottenere il risultato attraverso la classe SearchResult come segue:
bool userFound = false;
SearchResult foundUser = null;
try {
foundUser = searcher.FindOne(); // You might as well use the FindAll() method if you expect more then one result.
userFound = foundUser != null;
} catch(Exception) {
throw;
}
if (!userFound)
return;
DirectoryEntry user = foundUser.GetDirectoryEntry();
quindi, è possibile ottenere i gruppi di cui l'utente è membro in questo modo attraverso il memberOf proprietà:
user.Properties("memberOf").Value
Per una buona panoramica, vedere questo articolo CodeProject: How to (almost) everything in Active Directory.
E di un elenco delle proprietà: Mapping Between IADsUser Properties and Active Directory Attributes.
EDIT # 1
Se si utilizza la rappresentazione, si potrebbe forse prendere in considerazione l'impostazione di alcuni parametri per la vostra applicazione, come DefaultRootDomain, DefaultUserName e DefaultPassword, quindi utilizzare quando un'istanza tua root DirectoroEntry
.
public static class AdHelper {
public static string DefaultRootDse {
get {
return Properties.Settings.Default.DefaultRootDomain;
}
}
private static string DefaultUserName {
get {
return Properties.Settings.Default.DefaultUserName;
}
}
private static string DefaultPassword {
get {
return Properties.Settings.Default.DefaultPassword;
}
}
public static DirectoryEntry RootDse {
get {
if (_rootDse == null)
_rootDse = new DirectoryEntry(DefaultRootDse, DefaultUserName, DefaultPassword);
return _rootDse;
}
}
private static DirectoryEntry _rootDse;
}
non Devo specifiy un account utente e una password da utilizzare per accedere ai dati? –
Se si utilizza la rappresentazione, sì. Altrimenti, la classe 'DirectoryEntry' e l'AD presuppongono l'utente attualmente connesso (per una sessione di Windows, ad esempio. Non so come usarlo tramite un'applicazione Web). –
Se si dispone di .NET 3.5 o se è possibile aggiornare ad esso - con tutti i mezzi utilizzare la nuova funzionalità di System.DirectoryServices.AccountManagement
!
Vedere un ottimo articolo introduttivo Managing Directory Security Principals in the .NET Framework 3.5 su MSDN Magazine per ulteriori informazioni e un jumpstart.
perché non System.Web.Security? E c'era anche nel framework 2.0
cioè: http://msdn.microsoft.com/en-us/library/system.web.security.activedirectorymembershipprovider(v=vs.85) e ora nel quadro 4.0: http://msdn.microsoft.com/en-us/library/system.web.security.activedirectorymembershipprovider(v=vs.100)
- 1. Winform autorizzazione utente tramite Active Directory
- 2. Connessione a Active Directory tramite LDAP
- 3. Connetti ad Azure Active Directory da web application PHP
- 4. Come falsificare Active Directory?
- 5. Utilizzare Active Directory standard nell'app ASP.NET Core?
- 6. azure active directory e postman
- 7. Accesso al database in server Active Directory diverso
- 8. Verificare se l'account AD dispone di "Accesso come servizio" direttamente in Active Directory
- 9. Ottieni amministratori di Active Directory utilizzando Azure AD Graph Client
- 10. ASP.Net MVC Alternative Accesso all'identità
- 11. Attributo di scrittura LDAP Python ad Active Directory
- 12. Pagina di accesso personalizzata per Azure Active Directory
- 13. Classe helper Active Directory
- 14. Percorso directory Active LDAP
- 15. Accesso negato alla directory Temp.NET ASP.NET
- 16. Autenticazione MVC 4 con database Active Directory o Membership
- 17. Qual è il modo più sicuro per connettersi ad Active Directory da una DMZ?
- 18. Visualizzazione miniaturaFoto da Active Directory in PHP
- 19. Come recuperare SAMAccountName da Active Directory
- 20. Come utilizzare l'autenticazione di Active Directory con l'API Web ASP.NET?
- 21. Accesso a HtmlHelpers da WebForm quando si utilizza ASP.NET MVC
- 22. Reindirizzare da HTTPS con ASP.NET MVC App
- 23. 403 - Vietato: accesso negato. ASP.Net MVC
- 24. Come connettersi ad Active Directory con il contesto principale?
- 25. asp.net mvc razor - come uscire da C#
- 26. Come visualizzare Web Reportser di Active Reports in ASP.NET MVC
- 27. Accesso al repository SVN da CCNet (CruiseControl.net) utilizzando un utente di Active Directory
- 28. Active Directory riconosce la transazione?
- 29. Come aggiungere l'autenticazione di Azure AD all'applicazione MVC ASP.NET esistente?
- 30. Active Directory vs OpenLDAP
+1 interessante! Ho avuto solo la possibilità di lavorare contro l'AD in .NET 2.0. =) –
Davvero, davvero sexy! –
È bello quando funziona – IdahoSixString