myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Entwicklungs- und Laufzeitumgebung (Infrastruktur) » Mit ActiveDirectory verbinden von ausserhalb der Domäne
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Mit ActiveDirectory verbinden von ausserhalb der Domäne

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Fabiano
myCSharp.de-Mitglied

Dabei seit: 11.01.2021
Beiträge: 5


Fabiano ist offline

Mit ActiveDirectory verbinden von ausserhalb der Domäne

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen!

Hab kein AD-spezifisches Subforum gefunden und poste daher hier.
Folgendes C#-Programm funktioniert wie erwartet, wenn es auf dem DC oder einem Member Server ausgeführt wird:

C#-Code:
using System;
using System.DirectoryServices;

namespace Tests.LDAP {
    class Program {
        static void Main(string[] args) {
            var server = "dc.domain.example.com";
            var port = 636;
            var container = "CN=Users,DC=domain,DC=example,DC=com";
            var path = $"LDAP://{server}:{port}/{{0}}{container}";
            var user = "[email protected]";
            var password = "s0m3p4ssw0rd";
            var de = new DirectoryEntry(string.Format(path, "CN=User Name,"), user, password, AuthenticationTypes.SecureSocketsLayer);
            var prop = de.Properties["cn"]; // <-- Hier wird die Exception geworfen
            Console.WriteLine($"cn: {prop}");
            Console.ReadKey();
        }
    }
}

Wenn ich das Programm aber ausserhalb der Domäne laufen lasse, wird folgende Exception geworfen:

C#-Code:
Unhandled Exception: System.Runtime.InteropServices.COMException: The server is not operational.
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_AdsObject()
   at System.DirectoryServices.PropertyValueCollection.PopulateList()
   at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
   at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
   at Tests.LDAP.Program.Main(String[] args) in C:\source\Tests\Tests.LDAP\Program.cs:line 17

Wenn ich mit Apache Directory Studio mit folgenden Einstellungen verbinde, funktioniert alles problemlos:
Edit Abt: Bilder-Links entfernt.

Es muss sich also um ein Library- oder ein API-Benutzungsproblem handeln.
Hat hier jemand einen Tipp, wie ich das zum Laufen bekommen kann?
11.01.2021 12:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.472
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Willst Du (Dich) in einer Applikation authentifizieren, die auf einem Rechner betrieben wird, die NICHT teil der Domäne ist, dann kannst Du kein Kerberos (LDAP) verwenden.
Das ist schlicht und einfach nicht möglich (oder ein nicht offiziell unterstützterer Workaround).

Das geht nur über ein OpenID-Verfahren entweder mit Azure Active Directory oder mit einem Active Directory und einem ADFS (Active Directory Federation Services).
Letzter muss aus der Domäne betrieben werden; kann aber OpenID Tokens nach Außen geben und ist quasi der Übersetzer zwischen Kerberos und OpenId.
11.01.2021 13:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Fabiano
myCSharp.de-Mitglied

Dabei seit: 11.01.2021
Beiträge: 5

Themenstarter Thema begonnen von Fabiano

Fabiano ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Abt! Vielen Dank für deine schnelle Antwort!

Ich muss per LDAPS auf das Directory zugreifen, auch von ausserhalb der Domäne.
Kerberos ist dafür offensichtilich nicht notwendig, da es mit Apache Directory Studio ebenfalls geht (ohne Kerberos)
11.01.2021 13:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.472
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn ihr dieses Szenario habt, was so nicht empfohlen ist, dann setze  AuthenticationTypes auf Encryption.

Secure verwendet den internen NTLM Provider; also den Sicherheitskontext des aktuell am Windows angemeldeten Benutzers - das willst / hast Du ja nicht.
SecureSocketsLayer das gleiche; aber über SSL.

Bitte beachte  [Hinweis] Wie poste ich richtig? und verlinke keinen externen Bilder, sondern lade sie als Attachment hoch.
Ich habe die Links entsprechend entfernt.
11.01.2021 13:51 Beiträge des Benutzers | zu Buddylist hinzufügen
Fabiano
myCSharp.de-Mitglied

Dabei seit: 11.01.2021
Beiträge: 5

Themenstarter Thema begonnen von Fabiano

Fabiano ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ah, tut mir leid wegen der Bilder, hab sie nun angehängt.

Hab nun AuthenticationTypes.SecureSocketsLayer in AuthenticationTypes.Encryption geändert und bekomme immer noch die gleiche Exception geschmissen. Aber gemäss  https://docs.microsoft.com/en-us/dotnet/...et-plat-ext-5.0 hat der Enum-Member ohnehin den gleichen Wert?

Fabiano hat dieses Bild (verkleinerte Version) angehängt:
networkparameters.png
Volle Bildgröße

11.01.2021 15:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabiano
myCSharp.de-Mitglied

Dabei seit: 11.01.2021
Beiträge: 5

Themenstarter Thema begonnen von Fabiano

Fabiano ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hier noch das zweite Bild

Fabiano hat dieses Bild (verkleinerte Version) angehängt:
authentication.png
Volle Bildgröße

11.01.2021 15:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dannoe
myCSharp.de-Mitglied

Dabei seit: 24.11.2015
Beiträge: 127
Entwicklungsumgebung: VS2005-VS2017


dannoe ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hast du mal versucht das Protokol in deinem C# Code auf ldaps:// zu stellen?
In dem Apache Directory Studio steht dort zumindest ldaps://
11.01.2021 16:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabiano
myCSharp.de-Mitglied

Dabei seit: 11.01.2021
Beiträge: 5

Themenstarter Thema begonnen von Fabiano

Fabiano ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Klappt auch nicht, dann kommt nur ein System.Runtime.InteropServices.COMException: 'Unknown error (0x80005000)' an der gleichen Stelle.
11.01.2021 16:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 23.01.2021 15:19