AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Integration Active Directory + Benutzerverwaltung
Thema durchsuchen
Ansicht
Themen-Optionen

Integration Active Directory + Benutzerverwaltung

Ein Thema von TigerLilly · begonnen am 28. Apr 2021 · letzter Beitrag vom 29. Jul 2021
Antwort Antwort
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

Integration Active Directory + Benutzerverwaltung

  Alt 28. Apr 2021, 07:54
Bitte helft mir beim Denken :- )

Mein Programm hat eine Benutzerverwaltung samt Gruppen und Rollen. Der Wunsch ist jetzt, das "ans Active Directory" anzubinden. Aber wie würde ich das denn am besten machen?

An Stelle einer Login-Box würde ich wohl beim AD nach dem angemeldeten Benutzer(namen) fragen. Wollte ich wissen, ob der USer sich am Programm anmelden darf, müsste ich aus dem AD das PAsswort auselesen - das wird wohl nicht gehen. Also muss es im AD eine Gruppe/OU(?) geben, die den Zugriff erlaubt. Wie bringe ich diese OU ins AD?

Oder denke ich da verkehrt?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Integration Active Directory + Benutzerverwaltung

  Alt 28. Apr 2021, 08:17
Ich habe das schon länger nicht mehr gemacht, aber ich meine im Endeffekt muss man gar nicht fragen, der Nutzer ist ja schon in Windows angemeldet. Warum sollte er sich nochmal einloggen.
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Integration Active Directory + Benutzerverwaltung

  Alt 28. Apr 2021, 08:37
Bitte helft mir beim Denken :- )
...Also muss es im AD eine Gruppe/OU(?) geben, die den Zugriff erlaubt. Wie bringe ich diese OU ins AD?

Oder denke ich da verkehrt?
Hallo,

die OU/Gruppe bringt hoffentlich euer Admin ins AD und nicht du mit deinem Programm.
Stell' dir vor jede Software würde nach Belieben OUs, Benutzer, Gruppen, etc. im AD erstellen...

Ich denke du brauchst einfach eine Gruppe im AD, in der alle Benutzer eingetragen sind,
die das Programm benutzen dürfen.
Das fragt du ab - fertisch...

Stichworte könnten ADSI sein, oder mal hier schauen: https://www.rathlev-home.de/tools/admintools.html

Grüße
Steku
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Integration Active Directory + Benutzerverwaltung

  Alt 28. Apr 2021, 08:50
Die ADSI Sache kann man verwenden. Nutze ich z.B. um Daten vom AD mit einer Datenbank abzugleichen.

Um Mitgliedschaften vom angemeldeten Benutzer zu bekommen, frage ich den Prozess-Token ab.
Ich nutz dazu
OpenProcessToken(GetCurrentProcess(), TOKEN_READ, TokenHandle)
und
GetTokenInformation(TokenHandle, TokenGroups,..)

Ich kann dir leider kein "fertigen" Code geben, da die Quelltexte einen Kunden gehören.

Wenn du Webservices nutzt, kannst du auch mit NTLM, Kerberos arbeiten und den Webservice mit einem impersonate in das Konto des Remote-Benutzers bringen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von generic (28. Apr 2021 um 08:57 Uhr)
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Integration Active Directory + Benutzerverwaltung

  Alt 28. Apr 2021, 10:41
Zitat:
Ich habe das schon länger nicht mehr gemacht, aber ich meine im Endeffekt muss man gar nicht fragen, der Nutzer ist ja schon in Windows angemeldet. Warum sollte er sich nochmal einloggen.
Ich muss im Programm den Benutzernamen kennen, also entweder Login in der Software oder Abfrage im AD bzw Widows nach dem Usernamen. Aber stimmt, das genügt eigentlich schon.

Zitat:
ie OU/Gruppe bringt hoffentlich euer Admin ins AD und nicht du mit deinem Programm.
Stell' dir vor jede Software würde nach Belieben OUs, Benutzer, Gruppen, etc. im AD erstellen...

Ich denke du brauchst einfach eine Gruppe im AD, in der alle Benutzer eingetragen sind,
die das Programm benutzen dürfen.
Naja, Admin + Programm müssen sich ja auf dieselbe Gruppe beziehen, egal wer die dann anlegt.

ADSI kenne ich, danke trotzdem.

Der Plan wäre also:
- Beim Programmstart Windows Usernamen ermitteln
- damit in einer AD Gruppe nachsehen, ob enthalten -- > darf Programm ausführen
- damit in dieser AD Gruppe nach weiteren Einstellungen (Mandant etc) suchen
  Mit Zitat antworten Zitat
slemke76

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

AW: Integration Active Directory + Benutzerverwaltung

  Alt 29. Jul 2021, 18: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 19:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz