2008-09-16 12 views
6

Wie würden Sie ein System mit folgenden Zielen implementieren:Verwaltung großer Benutzerdatenbanken für Single-Signon

  • verwalten Authentifizierung, Genehmigung für Hunderttausende von bestehenden Benutzer zur Zeit eng mit einem integrierten Anwendung des Drittanbieters (Wir möchten diese Nutzer in etwas ausnutzen, das wir verwalten und dafür sorgen, dass unsere Apps dagegen arbeiten, und unsere Drittanbieter arbeiten dagegen).
  • Verwalten von Profilinformationen, die mit diesen Benutzern verknüpft sind
  • Muss von einer beliebigen Anzahl von Webanwendungen auf fast jeder Plattform (Windows, * nix, PHP, ASP/C#, Python/Django usw.) zugegriffen werden können.

Hier einige Beispielimplementierungen:

  • LDAP/AD-Server alles zu verwalten. Verwenden Sie ein benutzerdefiniertes Schema für alle Profildaten. Alles kann sich gegen LDAP/AD authentifizieren und wir können alle Arten von ACLs und Profildaten in einem benutzerdefinierten Schema speichern.
  • Verwenden Sie LDAP/AD nur für die Authentifizierung, verknüpfen Sie LDAP-Benutzer mit einer Datenbank (MSSQL/PostgreSQL/MySQL) oder einer dokumentenbasierten Datenbank (CouchDB, SimpleDB usw.) zu einem äußerst robusten Profil-/Autorisierungsserver. Benutze LDAP für die Autorisierung, dann drücke die DB für fortgeschrittenere Sachen.
  • Verwenden Sie eine traditionelle Datenbank (relational oder Dokument) für alles.

Sind diese drei die besten? Gibt es andere Lösungen, die den oben genannten Zielen entsprechen und einfacher zu implementieren sind?

** Ich sollte hinzufügen, dass fast alle Anwendungen, die gegen die Benutzerdatenbank authentifiziert werden, unter unserer Kontrolle sind. Die wenigen Außenseiter werden die Anwendungen sein, aus denen wir die aktuelle Benutzerdatenbank entfernen, und vielleicht 1 oder 2 andere. Nichts so weit, dass ein openID-Server benötigt wird.

Es ist auch wichtig zu wissen, dass viele dieser Benutzer diese Konten seit 5-8 Jahren haben und ihre Logins und Passwörter kennen, und so weiter.

Antwort

3

Es gibt einen Unterschied zwischen Authentifizierung und Autorisierung/Profilierung so nicht beide unbedingt zwingen, in ein einziges Werkzeug. Ihre zweite Lösung, LDAP für die Authentifizierung und einen DB für die Autorisierung zu verwenden, scheint robuster zu sein, da die LDAP-Daten vom Benutzer gesteuert werden und die Datenbank von einem Administrator gesteuert wird. Letzteres würde sich wahrscheinlich im Laufe der Zeit in Struktur und Komplexität verändern, aber Authentifizierung ist nur diese Authentifizierung. Die Trennung dieser Funktionen wird sich als überschaubarer erweisen.

-1

Sie können immer Ihren eigenen OpenID Server implementieren. Es gibt bereits eine Python library for OpenID, also sollte es ziemlich einfach sein.

Natürlich müssen Sie keine Logins akzeptieren, die von anderen Servern in Ihren Anwendungen autorisiert wurden. Akzeptieren Sie Zugangsdaten, die nur von Ihrem eigenen Server autorisiert wurden.

Bearbeiten: Ich habe eine implementation of OpenID server protocol in Django gefunden.

Edit2: Es gibt einen offensichtlichen Vorteil bei der Implementierung von OpenID für Ihre Benutzer. Sie können sich mit ihrem Logins bei StackOverflow einloggen :-)

+0

Ich sollte hinzufügen, dass fast alle Anwendungen, die gegen die Benutzerdatenbank authentifizieren werden, unter unserer Kontrolle sein wird. Nichts so weit, dass ein openID-Server benötigt wird. Es ist auch wichtig zu wissen, dass viele dieser Benutzer diese Konten für 5-8 Jahre gehabt haben und wissen, dass ihre Logins und Passwörter –

2

Wenn Sie bereits eine ActiveDirectory-Infrastruktur haben, ist das der richtige Weg. Dies ist besonders vorteilhaft für Unternehmen, die bereits Windows-Server für die Authentifizierung eingerichtet haben. Wenn dies der Fall ist, lehne ich mich Ihrem ersten Punkt in "Beispielimplementierungen" zu.

Sonst wird es ein Toss-up zwischen AD und Open Source LDAP-Optionen sein.

Es könnte nicht sinnvoll sein, ein eigenes Authentifizierungsschema für Single-Sign-On zu erstellen (insbesondere unter Berücksichtigung der vielen erforderlichen Dokumentations- und Integrationsarbeiten), und bündeln Sie Ihren Authentifizierungsserver natürlich nicht mit einem die Anwendungen, die auf Ihrem System ausgeführt werden (da Sie möchten, dass es unabhängig von der Auslastung solcher Anwendungen ist).

Goodluck!

+0

Die aktuellen Benutzerdatenbank + Profile in unserer 3rd-Party-Anbieter gespeichert sind traditionelle Datenbank (* SQL). Wir haben eine sehr begrenzte Fähigkeit, in diese Datenbank zu integrieren, und wir haben lieber die volle Kontrolle darüber. Wir möchten die Benutzer befreien und dann mit dem neuen db/ldap –

+0

die 3. Parteiarbeit machen Was LDAP nett ist, andere Produkte von Drittanbietern für das Unternehmen sollte es für die Benutzerverwaltung verbinden können. –

+0

Ich denke, dass LDAP für die Authentifizierung Portierung dieses Projekts wahrscheinlich ist, aber was ist mit dem Speichern von Profilinformationen? Stopf es auch in LDAP? Teilen Sie es in einem anderen Geschäft aus? –

0

Verwenden Sie LDAP/AD nur zur Authentifizierung, verknüpfen Sie LDAP-Benutzer mit einer Datenbank (MSSQL/PostgreSQL/MySQL) oder einer dokumentenbasierten Datenbank (CouchDB, SimpleDB usw.) zu einem äußerst robusten Profil-/Autorisierungsserver. Benutze LDAP für die Autorisierung, dann drücke die DB für fortgeschrittenere Sachen.

+0

Ich wähle dies als "sichere" Antwort, da ich nicht sicher bin, wie flexibel LDAP-Schemaänderungen in der Produktion sind. Ich fühle mich jedoch sehr wohl dabei, es für einen Benutzerspeicher zu verwenden, während ich eine Datenbank ändere, wenn Features hinzugefügt werden. –

0

Wir haben verschiedene Standorte mit rund 100k Benutzer und sie alle arbeiten mit normalen Datenbanken. Wenn die meisten Anwendungen auf die Datenbank zugreifen können, können Sie diese Lösung verwenden.