tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
15
ZUGRIFFE
2852
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    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

    Gruß
    RudolfG
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  2. #2
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    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.
     

  3. #3
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Hi Steiner_B,

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

    Zitat Zitat von Steiner_B Beitrag anzeigen
    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
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  4. #4
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Meinst du wie du überprüfen kannst welcher Benutzer gerade angemeldet ist?
     

  5. #5
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Meinst du wie du überprüfen kannst welcher Benutzer gerade angemeldet ist?
    genau, sry für die unverständliche Frage
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  6. #6
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    In der winbase.h gibts eine Funktion getUserName() wenn ich mich recht erinnere
     

  7. #7
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Zitat Zitat von Steiner_B Beitrag anzeigen
    In der winbase.h gibts eine Funktion getUserName() wenn ich mich recht erinnere
    Danke, aber wofür benötige ich jetzt LDAP bzw. wofür habt ihr es damals benötigt (um zu überprüfen ob dieser Benutzer im Active Directory ist?)?
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  8. #8
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    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.
     

  9. #9
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Zitat Zitat von Steiner_B Beitrag anzeigen
    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.

    Zitat Zitat von Steiner_B Beitrag anzeigen
    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.

    Zitat Zitat von Steiner_B Beitrag anzeigen
    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.

    @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

    Gruß
    RudolfG
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  10. #10
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    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.
     

  11. #11
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Aber mal ein ganz anderer Gedankengang: Wenn dein Programm gestartet wird reicht es doch eigentlich wenn du feststellst ob der gerade aktive User ein User der Domaine ist. Denn wenn der Benutzer Domainmitglied ist und auf dem Rechner eingeloggt ist kann man ja davon ausgehen das er das Passwort dort schon richtig eingegeben hat.
    Soweit ich mich erinnern kann muss man für eine Abfrage nach Benutzername oder Benutzergruppen nicht speziell authentifiziert sein, was bedeutet das dein Programm das Passwort nicht kennen muss. Und wie man den Benutzernamen bekommt haben wir ja eh weiter oben schon mal gehabt.
    RudolfG bedankt sich. 

  12. #12
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Heißt das das deine Benutzer bis jetzt Passwort und Benutzernamen eingeben mussten?
    Für die Identifikation im Programm selber, hier konnten Benutzer eigene Benutzernamen und Passwörter völlig unabhängig von den Windowsbenutzernamen und Passwörtern eintragen und auf diese wurde beim Programmstart geprüft.

    Dies sollte verhindert werden wenn die "Windows-Anmeldung benutzen?" aktiviert wird, indem der aktuelle Windows-Benutzername mit dem Benutzernamen in der Datenbank verglichen wird und somit gesagt werden kann, dass der Windows-Benutzer "rudolf" der Anwendungsbenutzer "rudolf" mit der ID = 25 ist (diese Id wird dann intern benötigt um Einträge in anderen Tabellen einzutragen etc.).

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Wenn man nichts eingeben soll wird sicher das Hauptproblem werden das Passwort des Benutzers herauszufinden.
    Ich glaube wir reden hier an einander vorbei, oder meinst du hier nicht das Windows-Passwort? Ich möchte nämlich nicht die Passwörter auslesen! In dem Datenbankfeld "pw" stehen eigene völlig unabhängig vom OS vergebene Passwörter, diese müssen auch nicht mit den vom OS synchronisiert werden. Diese sind nur für den Fall da, dass Anwender bzw. dessen Administrator einstellen, dass die Anwendungseigene Benutzer-Identifikation benutzt werden soll.

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Aber mal ein ganz anderer Gedankengang: Wenn dein Programm gestartet wird reicht es doch eigentlich wenn du feststellst ob der gerade aktive User ein User der Domaine ist. Denn wenn der Benutzer Domainmitglied ist und auf dem Rechner eingeloggt ist kann man ja davon ausgehen das er das Passwort dort schon richtig eingegeben hat.
    Das stimmt, d. h. das würde ja in etwa meine oben genannte Idee entsprechen, das SSO über den Benutzer- und Domännamen zu implementieren.

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Soweit ich mich erinnern kann muss man für eine Abfrage nach Benutzername oder Benutzergruppen nicht speziell authentifiziert sein, was bedeutet das dein Programm das Passwort nicht kennen muss. Und wie man den Benutzernamen bekommt haben wir ja eh weiter oben schon mal gehabt.
    Ok vielen Dank

    Gruß
    RudolfG
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  13. #13
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hi

    Was ich meinte war: Wenn du überprüfen willst ob ein angemeldeter Benutzer wirklich ein gültiger Domänenbenutzer ist müsstest du eine Anfrage mit Benutzernamen und Windowspasswort an das LDAP-Service stellen. Hierzu fehlt dir aber das Passwort.

    Das stimmt, d. h. das würde ja in etwa meine oben genannte Idee entsprechen, das SSO über den Benutzer- und Domännamen zu implementieren.
    Ja genau, jedoch sind unter Windows Server die Kombination aus Benutzernamen und Domäne keine eindeutige Identifizierung. Es gibt eine sog. SSID die genau diese Daten und eine eindeutige Identifizierung zu einem Master-Domänenkontroller beinhaltet. Über diese SSID kannst du dir später mal auch die Gruppen und sonstige Information aus dem Active Directory laden.

    Soweit so gut. Ich hab jetzt schon leicht den Überblick verloren. Sind jetzt noch konkrete Fragen von dir offen?
    RudolfG bedankt sich. 

  14. #14
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    337
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Hi

    Was ich meinte war: Wenn du überprüfen willst ob ein angemeldeter Benutzer wirklich ein gültiger Domänenbenutzer ist müsstest du eine Anfrage mit Benutzernamen und Windowspasswort an das LDAP-Service stellen. Hierzu fehlt dir aber das Passwort.
    Ok, kann man als normaler Windows-Benutzer eine LDAP-Abfrage über das Passwort und den Benutzernamen ausführen? Oder benötigt man dafür spezielle Berechtigungen? Wie habt ihr das den in eurer Anwendung (für deine Dipl-Arbeit) gemacht bzw. wie seit ihr an das aktuelle Windows-Passwort gekommen?

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Es gibt eine sog. SSID die genau diese Daten und eine eindeutige Identifizierung zu einem Master-Domänenkontroller beinhaltet. Über diese SSID kannst du dir später mal auch die Gruppen und sonstige Information aus dem Active Directory laden.
    Ok und an diese SSID komme ich über eine LDAP-Abfrage in dem AD nur mit dem aktuellen Windows-Benutzernamen?

    Zitat Zitat von Steiner_B Beitrag anzeigen
    ...jedoch sind unter Windows Server die Kombination aus Benutzernamen und Domäne keine eindeutige Identifizierung....
    .
    Diese Aussage verwirt mich gerade, wie erkennt den Windows als welcher der beiden Benutzer "rudolf" ich aus ein und der selben Domäne mich anmelden möchte

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Soweit so gut. Ich hab jetzt schon leicht den Überblick verloren. Sind jetzt noch konkrete Fragen von dir offen?
    Außer, die in diesem Beitrag gestellten hat sich das soweit erledigt

    Danke

    Gruß
    RudolfG
    Geändert von RudolfG (10.07.10 um 00:27 Uhr)
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  15. #15
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hi

    In unserer Anwendung musste aus Sicherheitsgründen der Windows-Benutzername und das Passwort eingegeben werden, da unsere Anwendung auch auf einigen embedded systems gelaufen ist und somit der angemeldete Benutzer nicht mit dem Benutzer übereingestimmt hat der dann in unserer Software arbeiten wollte.

    Ok, kann man als normaler Windows-Benutzer eine LDAP-Abfrage über das Passwort und den Benutzernamen ausführen?
    Du kannst entweder eine Art anonyme Anfrage stellen, z.B.: Ist Benutzer x mit Passwort y eine gültige Kombination. Für manche andere Anfragen kann es notwendig sein sich explizit in LDAP zu authentifizieren. Was genau anonym geht und was nicht weiß ich leider nicht.

    Die SSID kannst du aus der Domänen-Kennung und dem Benutzernamen irgendwie berechnen. Wie genau weiß ich auch nicht, aber man findet dazu mit google glaub ich ganz gute Resultate.

    Diese Aussage verwirt mich gerade, wie erkennt den Windows als welcher der beiden Benutzer "rudolf" ich aus ein und der selben Domäne mich anmelden möchte
    In einer Domäne ist der Benutzername eindeutig, es können jedoch zwei Domänen mit gleichem Namen bestehen, welche den gleichen Benutzernamen enthalten.
    RudolfG bedankt sich. 

Ähnliche Themen

  1. CORBA: SSL + Single Sign on
    Von garby im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 09.05.09, 16:43
  2. Single Sign On
    Von alim27 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 12.04.08, 10:41
  3. Passwortmanager/ Single Sign In in PHP ?
    Von firerescue911 im Forum PHP
    Antworten: 8
    Letzter Beitrag: 17.03.08, 17:15
  4. Single Sign On unter Tomcat5.5
    Von jandalf im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 11.09.07, 11:51
  5. Single sign on ---> VB.NET
    Von sve07bl im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 20.10.05, 14:31

Stichworte