2017-03-02 7 views
0

Ok, ich habe Active Directory-Lookups, die funktionieren, wenn ein Benutzer seinen Benutzerpass eingibt. Jetzt versuche ich, diesen Code anzupassen, um Single Sign-On zu ermöglichen. Was ich habe:C# Active Directory FindByIdentity schlägt fehl

  • IIS App Pool Network User eingestellt
  • Anonym Auth wandte sich in IIS
  • Web-Config-Setup mit und

-Code ab:

WindowsIdentity userIdentity = WindowsIdentity.GetCurrent(); 
using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "mydomain.com")) 
{ 
this.User = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, userIdentity.Name); 

Die FindByIdentity schlägt mit einem dieser Fehler abhängig von verschiedenen Kontextänderungen fehl:

Unbekannter Fehler (0x8000500c) Stack: bei System.DirectoryServices.PropertyValueCollection.PopulateList()

Unbekannter Fehler (0x80005000) Stack: bei System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()

Dinge, die ich habe include versucht, den Containernamen zur Context-Suche in der Form "cn = Benutzer, dc = mydomain, dc = com" und "dc = mydomain, dc = com" hinzuzufügen und ContextOptions.Negotiate zu enthalten oder nicht mit dem Container-Set oder dem Container als Null übergeben.

Nur nicht sicher, wohin ich als nächstes gehen soll. Ich brauche alle Gruppennamen für den Benutzer, und ich habe versucht, nur die Gruppennamen mit UserPrincipal.Current.GetGroups oder was auch immer das ist, aber es schlägt mit dem gleichen PopulateList() Fehler wie oben.

Fehle ich etwas einfaches? Wenn ich den Benutzer/pass in der Kontexterstellung gebe, funktioniert es gut, also bin ich nicht sicher, ob ich einen AD-Benutzer erstellen muss, um AD abzufragen, aber das ist keine großartige Option wenn überhaupt.

Ich habe alle Beiträge diesbezüglich gelesen und kann nicht vorbei zu kommen scheinen.

Antwort

0

Fehler 0x8000500c bedeutet Active Directory Datatype Cannot be Converted to/from a Native DS Datatype.

Dieses Problem wird verursacht, weil WindowsIdentity.Name im Format DOMAIN\USERNAME ist, das keine gültige SamAccountName ist.

Scheint wie Sie versuchen, die UserPrincipal für den aktuellen Benutzer zu bekommen, wenn ja, verwenden Sie einfach UserPrincipal.Current.

+0

also habe ich es geändert zu tun: UserPrincipal user = UserPrincipal.Current; und ich erhalte diesen Fehler, obwohl das Current sagt, dass es ein UserPrincipal zurückgibt: Kann Objekt vom Typ 'System.DirectoryServices.AccountManagement.GroupPrincipal' nicht umwandeln, um 'System.DirectoryServices.AccountManagement.UserPrincipal' einzugeben. Stack: bei System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity (PrincipalContext-Kontext, IdentityType-identityType, String identityValue) bei System.DirectoryServices.AccountManagement.UserPrincipal.get_Current() – JeffR