Einzelnen Beitrag anzeigen

slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#6

AW: Integration Active Directory + Benutzerverwaltung

  Alt 29. Jul 2021, 19:53
Hallo,

An Stelle einer Login-Box würde ich wohl beim AD nach dem angemeldeten Benutzer(namen) fragen.
also, grundsätzlich gibt es zwei Möglichkeiten:

1. (einfacher) - du präsentierst dem User einen Login Dialog und prüfst seine Eingaben per ldaps:// (ldap:// - also unverschlüsselt wird wohl bald abgeschaltet) gegen das Active Directory und ggf. gegen Mitgliedschaft in irgendwelchen OUs oder Gruppen (darf Programm nutzen oder nicht oder mit Berechtigungen, etc.). Er kann sich dann mit seinem Login und Passwort in deiner Anwendung anmelden. Ändert er sein Windows-Passwort, muss er das neue Kennwort auch in deiner Anwendung nutzen. Deine Anwendung braucht für die ldaps:// Abfrage ebenfalls einen User im Active Directory. Ein ganz einfacher mit ein ein paar speziellen Berechtigungen reicht, nicht den Administrator nehmen. Quellen: siehe unten. Bitte ggf. auch die maximale Anzahl der Ergebnis-Objekte hochsetzen. Quelle: siehe ebenfalls unten.

2. Authentifizierung mittels NTLM oder Kerberos, Realisierung eines "echten" Single-Sign-Ons (SSO). Der User bekommt keine Login-Box zu sehen, deine Anwendung kommuniziert mit dem Server und der User ist "magisch" eingeloggt. Das wird auch gerne für Web-Anwendungen gemacht.
2a. NTLM - Erklärung - siehe hier: http://www.microsoftnow.com/2008/10/...-returned.html Das Protokoll ist relativ alt, wenn man etwas vorhandenes nutzen kann, würde ich das vielleicht (!) machen, aber es ist zu erwarten, dass viele Admins das in absehbarer Zeit abschalten (meine bescheidene Meinung ) - oder Microsoft die Admins dazu zwingt.
2b. Kerberos - Erklärung - siehe hier: https://de.wikipedia.org/wiki/Kerberos_(Protokoll) - das würde ich machen, da aktuell & sicherlich noch lange unterstüzt. Allerdings gibt es in Delphi aktuell nur wenig, wo man "abgucken" könnte. Ich habe für den MSSQL-Server das hier gefunden: https://stackoverflow.com/questions/...authentication und würde gerne selber eine Erweiterung für die Indy-Komponenten machen, die es erlaubt, HTTP-Requests per Kerberos zu authentifizieren, siehe: https://www.delphipraxis.net/184110-...dl-import.html - da geht das Abrufen eines Tickets schon einmal.

Ein "Mapping" des Benutzers/Benutzergruppe gegen Berechtigungen in deinem Programm brauchst du auf alle Fälle.

Ich hoffe, ein paar Ansatzpunkte geliefert zu haben Wenn du in Richtung Kerberos weiter gehst, wäre ein Gedankenaustausch hier oder in dem anderem Thread prima.

Edit:
Ich habe mir mal den Link oben (rathlev-home.de) angesehen, in dem es heißt
Zitat:
Viel einfacher ist es, das hier vorgestellte Konsolenprogramm AuthAds zu integrieren. Es wird mit den erforderlichen Parametern aufgerufen und liefert als ExitCode einen Wert, der Aufschluss darüber gibt.
Ernsthaft? Habe ich gerade ein Brett vor dem Kopf? Ich tausche dann einfach die AuthAds.exe gegen ein Programm aus, dass den gewünschten Exit-Code liefert und ich bin authentifiziert?

Edit2:
Zitat:
Ich nutz dazu
OpenProcessToken(GetCurrentProcess(), TOKEN_READ, TokenHandle)
und
GetTokenInformation(TokenHandle, TokenGroups,..)
Das macht in deinem Fall wahrscheinlich am meisten Sinn.

Grüße
Sebastian



Quellen:
LDAP:
https://community.cisco.com/t5/email...n/td-p/1971060
https://docs.microsoft.com/en-us/pre...ectedfrom=MSDN
http://www.microsoftnow.com/2008/10/...-returned.html

Kerberos:
https://www.apriorit.com/dev-blog/67...sa-service-api
https://blog.varonis.de/wie-funktion...entifizierung/

Geändert von slemke76 (29. Jul 2021 um 20:25 Uhr)
  Mit Zitat antworten Zitat