Zum Inhalt springen
  • 0

C# AD Anbindung für Ticketsystem


varafisi

Frage

Mahlzeit,

ich möchte ein Ticketsystem mit einer GUI und einer Benutzeranmeldung über eine LDAP Anbindung in C# programmieren. Nun bin ich mittlerweile schon auf Stackoverflow, mycsharp etc. gewesen, um mir gewisse Information über die Herangehensweise von solch einem Projekt (KEIN Abschlussprojekt) herauszulesen. Ich lerne aktuell den FISI und bin im 3. Lj - demnach kein AE'ler aber mit meinem Thema schon im richtigen Forum. Die Authentifizierung mit dem DomAdmin funktioniert. Mit dem Haltepunkt und dem Curser konnte ich sehen, dass er die OU's auch auslesen konnte aber ich weiß nicht, wie ich den Code ideal auf die Abfrage der Benutzerdaten vorbereite, um ihn später an  der richtigen Stelle zu importieren. Es ist wie "ein Brett vor'm Kopp'" und ein Hauch von Verzweiflung. Wer kann helfen?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;

namespace AdTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string domain = "172.16.112.30";
            string user = "Administrator";
            string password = "HALLO123";

            Authenticate(domain, user, password);
        }

        public static bool Authenticate(string domain, string username, string password)
        {
            SecureString pwd = new SecureString();
            bool bAuth = false;
            DirectoryEntry entry = null;

            //Durchlaufe das Passwort und hänge es dem SecureString an
            foreach (char c in password)
            {
                pwd.AppendChar(c);
            }

            //Bewirkt, dass das Passwort nicht mehr verändert werden kann
            pwd.MakeReadOnly();

            //Passwort wird einem Pointer übergeben, damit dieser später "entschlüsselt" werden kann
            IntPtr pPwd = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(pwd);

            try
            {
                entry = new DirectoryEntry(string.Concat(@"LDAP://"+domain, ""), username, System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPwd));
                object nativeObject = entry.NativeObject;
                bAuth = true;
            }
            catch (Exception)
            {
                bAuth = false;
            }
            finally
            {
                entry.Close();
                entry.Dispose();
            }
            return bAuth;
        }
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
vor 10 Stunden schrieb varafisi:

[...] aber ich weiß nicht, wie ich den Code ideal auf die Abfrage der Benutzerdaten vorbereite, um ihn später an  der richtigen Stelle zu importieren. Es ist wie "ein Brett vor'm Kopp'" und ein Hauch von Verzweiflung. [...]

Wenn ich dich also richtig verstehe, funktioniert dein bereits geschriebener Code, er ist nur hier nicht an der richtigen Stelle um ihn sinnvoll einzusetzen. Wenn das so ist, pack die Authentifizierung in eine eigene Klasse und referenzier an der richtigen Stelle als Assembly/Nuget.

Irgendwie habe ich aber meine Zweifel, dass du das gemeint hast. Falls nicht, wäre es gut, wenn du nochmal deine Frage ein wenig simpler stellen könntest... ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 1 Stunde schrieb 0x00:

Wenn ich dich also richtig verstehe, funktioniert dein bereits geschriebener Code, er ist nur hier nicht an der richtigen Stelle um ihn sinnvoll einzusetzen. Wenn das so ist, pack die Authentifizierung in eine eigene Klasse und referenzier an der richtigen Stelle als Assembly/Nuget.

Irgendwie habe ich aber meine Zweifel, dass du das gemeint hast. Falls nicht, wäre es gut, wenn du nochmal deine Frage ein wenig simpler stellen könntest... ?

So wie er dort steht funktioniert er nur bis in die oberste Ebene (Domäne). Bislang sieht er alle OU's was heißt, dass sich quasi jeder User jeder OU an dem Ticketsystem anmelden kann. Ich habe die LDAP Anbindung nun folgender Maßen gemacht:

string adDomain = @"LDAP://" + domain + "/OU=Benutzer,OU=Ticketsystem, DC=domain, DC=local";

Nun habe ich eine Instanz vom Typ DirectorySearcher angelegt, der prüft, ob der Benutzer der sich an dem Ticketsystem anmelden will erstmal in der Default OU "Users" ist und zusätzlich der samaccountname = + username + ist.

Jetzt wo du es sagst macht es aber durchaus Sinn, die Authentifizierung in eine eigene Klasse auszulagern und später aufzurufen. Aber bislang macht mein Code nichts anderes als die Anmeldung bzw. die Gegenprüfung vom Active Directory. Sofern wir ein gewisses Berechtigungsschema implementieren wollen, könnte das den Rahmen sprengen und dann müsste ich den Teil wirklich auslagern.

Man hat das Nerven gekostet..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...