Single Sign-On für eigene Anwendung

RudolfG

Erfahrenes Mitglied
Hi Leute,

ich möchte meine Anwendung um das Single Sign-On erweitern, sodass keine Anmeldung an meiner Software notwendig ist (also die Login-Daten von Windows benutzt werden bzw. die Authentifizierung von Windows ausreicht).

Ich habe aber leider keinen Anhaltspunkt, Idee wie ich das Umsetzen kann/soll. Mir währe es sehr wichtig, dass dies nicht nur auf einem Klient funktioniert, sondern auch innerhalb einer Domäne (also die Login-Daten aus dem Domänen-Kontroller!).

Meine bisherigen Recherchen, endeten immer bei Web- und Java-Lösungen, aber ich fand einfach keine Beispiele etc. wie man das mit Hilfe von nativem C++ erledigen kann. (ThirdParty?, LDAP etc.?).

Ich freue mich über jede Idee und möglichkeit :D

Gruß
RudolfG
 
Hi

Ich habe vor einigen Jahren in meiner Diplomarbeit so etwas ähnliches gebaut. Wir hatten das damals zwar den großteil mit PHP implementiert, jedoch einige Systemkomponenten auch mit C++. Die einfachste Lösung die wir damals ausgegraben haben ist mittels LDAP und der Libary von www.openldap.org gewesen.
Das damalige System war basierend auf Windows 2003 Server.
 
Hi Steiner_B,

vielen Dank für die Antwort, aber ich habe einige Fragen dazu :D

Die einfachste Lösung die wir damals ausgegraben haben ist mittels LDAP und der Libary von www.openldap.org gewesen.
Das damalige System war basierend auf Windows 2003 Server.

Und wie konntet ihr LDAP nutzen um an die Authentifikation des Domänkontrollers dran zu kommen? Kann man das per LDAP-Abfragen im Active-Directory machen (wenn ja würde ich mich sehr über eine ausführliche Antwort, wie es genau funktioniert, freuen!)?

Gruß
RudolfG
 
Wir haben damals mehrere Sachen damit gemacht.

1. Überprüft ob Benutzername + Passwort überhaupt ein gültiger Domain-Login ist.
2. Die Gruppen geladen welchen der Benutzer angehört, da über diese unsere Rechte in der Applikation verwaltet waren.

Soweit ich deinen Aufgabe verstehe geht es bei dir eh nur darum festzustellen ob der Benutzer in der Domain vorhanden ist? Oder darf nicht jeder Benutzer der Domain auf das Programm zugreifen? Erklär mal bitte etwas genauer was du erreichen möchtest.
 
Wir haben damals mehrere Sachen damit gemacht.

1. Überprüft ob Benutzername + Passwort überhaupt ein gültiger Domain-Login ist.

Das heißt, das bei euch der Benutzer zuerst sein Benutzernamen und das Passwort eingeben musste, oder woher habt ihr diese Informationen genommen? Ungefähr so etwas brauche ich auch, wobei der Anwender die Daten nicht eingeben soll, sondern hier eine Überprüfung notwendig ist ob die aktuelle Anmeldung eine gültige/erfolgreichen Domain-Anmeldung ist.

2. Die Gruppen geladen welchen der Benutzer angehört, da über diese unsere Rechte in der Applikation verwaltet waren.

Das ist im Moment nicht meine Aufgabe, allerdings soll ich das Authentifizieren so entwickeln, dass diese Möglichkeit möglichst einfach umgesetzt werden kann. Also das ich schon mal die GUID oder so des Benutzers habe um so einfacher die Gruppe abzufragen etc.. Als nächstes steht mir die Rechteverwaltung auf Basis der Gruppenrichtlinien/Administrative Vorlagen bevor und ich möchte gerne einen einheitlichen Weg/ein einheitliches Verfahren benutzen.

Soweit ich deinen Aufgabe verstehe geht es bei dir eh nur darum festzustellen ob der Benutzer in der Domain vorhanden ist? Oder darf nicht jeder Benutzer der Domain auf das Programm zugreifen? Erklär mal bitte etwas genauer was du erreichen möchtest.

Also es geht für mich erstmal einen möglichst guten/sinnvollen Weg für das Handhaben des SSO's unter Windows zu finden. Da als nächstes die Rechteverwaltung dran ist und diese auf Basis von Administrativen-Vorlagen (im Active Directory) und den Gruppenrichtlinen erfolgen soll, dachte ich, dass ich das am besten irgendwie mit Active-Directory machen sollte.


Eine Idee dieses SSO (ohne das AD) zu verwirklichen war die folgende:
----------------------------------------------------------------------
Also ich habe es wie folgt angedacht:

Das ist die Tabelle in der Datenbank in der Benutzer der Software verwaltet werden:

sys_users
{
id,
sign, // Login-Kürzel
pw char(40), // Hash, es muss nämlich für Kunden die, die keine Windows-Authentifizierung möchten, möglich sein eigene Passwörter zu hinterlegen!
windows_login bool, // Windows-Athentifizierung benutzen?
domain // aus welcher Domäne darf sich der Benutzer mit dem Benutzernamen aus der Spalte sign anmelden. (Wird nur für die automatische Windows-Authentifizierung benötigt!)
}

Bei dem Start der Software wird der Windows-Benutzername ausgelesen, der passende Benutzerdatensatz aus der Tabelle, durch das vergleichen des Benutzernamens mit der Spalte "sign", gesucht. Wird kein Eintrag gefunden oder die spalte windows_login bei diesem Datensatz hat "false", kommt der Anwendungseigene Login-Dialog der die Identität durch vergleichen der Eingabe und des Passworts bestätigt oder auch nicht.

Sollte ein Eintrag zu dem aktuellen Windows-Benutzernamen gefunden werden und da in der Spalte windows_login true stehen, sollte jetzt überprüft werden ob die Domäne des aktuellen Windows-Benutzers mit dem Eintrag in der Spalte "domain" übereinstimmt. Ist das der Fall, wird die Software als dieser Benutzer gestartet, ist das nicht der Fall bekommt der Benutzer eine Fehlermeldung und hat die Möglichkeit sich durch das "manuelle" Login anzumelden.

.--------------------------------------------------------------

In dieser Idee werden alle Informationen einmal in der AD und einmal in meiner Software verwaltet, was zu einer doppelten Pflege der Benutzer/Gruppen und nachher auch Rechte führen würde. Dies ist natürlich keinen Kunden zuzumuten, deswegen suche ich nach einer Möglichkeit möglichst viele Informationen (und darunter auch die Authentifizierung ob der Benutzer die Software starten darf und auch als wer er die Software startet) aus dem Active-Directory auszulesen damit man nachher eine einfachere Rechteverwaltung hinbekommen kann.

Bei der Variante mit dem AD stehe ich aber vor einem Problem, was mache ich wenn der Kunde kein Windows-Server (und somit kein AD) hat, sondern die Software als Einzelplatz benutzen möchte? Muss ich hier dann alternativen in form von XML, INI oder sonstigen Schaffen?

Hoffe das diese Informationen hilfreicher sind, mein Problem nachzuvollziehen. :D

@Steiner_B: Danke für die bisherige Antworten, die haben mir aufgezeigt, dass ich überhaupt noch viele grundlegende Fragen/Antworten finden muss. Ich würde mich sehr freuen wenn wir diese zusammen finden könnten :D

Gruß
RudolfG
 
Heißt das das deine Benutzer bis jetzt Passwort und Benutzernamen eingeben mussten?
Wenn man nichts eingeben soll wird sicher das Hauptproblem werden das Passwort des Benutzers herauszufinden.
 
Zurück