Gewusst wie: übergeben Sie ein UserPrincipal mit PrincipalContext innen ASP.NET MVC
Ich habe den folgenden code, um die Verbindung zu unserer ANZEIGE :-
List<DomainContext> results = new List<DomainContext>();
string ADServerName = System.Web.Configuration.WebConfigurationManager.AppSettings["ADServerName"];
using (var context = new PrincipalContext(ContextType.Domain, ADServerName))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
Oben gearbeitet, auf unseren Dev-Maschine, wie die ANZEIGE und die asp.net mvc waren auf der gleichen Maschine. momentan habe ich eine Verbindung zu unserer staging-AD, die auf verschiedenen Maschinen. so brauche ich zum bestehen der AD-Dienstkonto (Benutzername & Passwort) auf die PrincipalContext
. Kann jemand Rat? Ich lese online, dass ich UserPrincipal
wie folgt:-
public UserPrincipal(
PrincipalContext context,
string samAccountName,
string password,
bool enabled
)
aber ich bin nicht sicher, wie ich das ändern kann meinen code entsprechend ?
Dank
BEARBEITEN
Ich habe diese Anzeige nur für Benutzer, die brancjA oder brachB innerhalb Ihrer definierten Konten:-
public List<DomainContext> GetADUsers(string term=null)
{
string[] types = new string[] { "BranchA", "BranchB" };
List<DomainContext> results = new List<DomainContext>();
string ADServerName = System.Web.Configuration.WebConfigurationManager.AppSettings["ADServerName"];
using (var context = new PrincipalContext(ContextType.Domain, ADServerName, "username", "password"))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
var searchResults = searcher.FindAll();
foreach (Principal p in searchResults)
{
if ((term == null || p.SamAccountName.ToString().ToUpper().StartsWith(term.ToUpper())) && (types.Contains(p.DistinguishedName)))
aber das Ergebnis war, dass keine Benutzer zurückgegeben wurden. können Sie Rat bitte ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sprechen Sie über die Schaffung der
PrincipalContext
und Lieferung von spezifischen Anmeldeinformationen (Benutzername + Kennwort) dabei?Check-out die fabolous MSDN-Dokumentation auf
PrincipalContext
- frei zur Verfügung jemand - nutzen Sie es!Wie Sie sehen können, die
PrincipalContext
hat mehrere überladene Konstruktoren, damit verschiedene Szenarien:Werden Sie wahrscheinlich verwenden wollen dieser Konstruktor hier:
Diese können Sie übergeben Sie einen Benutzernamen und ein Kennwort für alle Ihre AD-operations in diesem Kontext.
Update: der follow-up Frage nach der Rückkehr nur den "normalen" Benutzer (und ignorieren die "service-accounts") - wenn Sie eine
PrincipalSearcher
definieren Sie eine "query-by-example" - Prinzip zu tun Ihre Suche:Natürlich, je nach Ihrem Bedarf, möchten Sie möglicherweise andere Eigenschaften an, die "Abfrage-durch-Beispiel" user principal erstellen Sie:
DisplayName
(in der Regel: "Vorname + Leerzeichen + Nachname)SAM Account Name
- Ihre Windows - /AD-Konto nameUser Principal Name
- Ihre "[email protected]" Stil-NamenKönnen Sie legen Sie die Eigenschaften auf der
UserPrincipal
und verwenden diese als "Abfrage-durch-Beispiel" für IhrePrincipalSearcher
. Also wirklich, Sie brauchen nur zu finden, die richtige Art und Weise auszudrücken, die Kriterien, was unterscheidet den "normalen" Benutzer aus der "service-accounts" in IhrerPrincipalSearcher
und Sie sollten in der Lage sein, dies zu tun just fineUpdate #2:, was ich meinte, war etwas wie:
PrincipalContext
welches Ihnen erlaubt zu definieren, in denen container, um die Suche für die Objekte, so könnten Sie z.B. die Suche innerhalb nurOU=Users
(und alle untergeordneten Container), wenn die service-accounts sind an anderer Stelle befindetOU=BranchA
und vorübergehend halten Sie alleUserPrincipal
Objekte zurückgegeben werden, und dann eine zweite Suche inOU=BranchB
und mischen Sie die Ergebnisse in der ersten Liste - und dann haben Sie alle Ihre "normalen" Benutzer