So migrieren Sie vorhandene Legacy-Webanwendungen zur Verwendung von OAuth2

10

Ich habe derzeit eine 15 Jahre alte monolithische Webanwendung mit fast 1 Million Benutzern, die ein selbst entwickeltes Autorisierungs- und Authentifizierungssystem verwendet: JAAS, Benutzernamen und pwds-Speicher in einer Datenbank mit grundlegendem Kennwort-Hashing, einige 2FA-Fragen zur persönlichen Überprüfung (mit unterschiedlichen Hashing-Algorithmen usw.).

Ich werde die Anwendung in den nächsten 12 bis 18 Monaten überarbeiten, wobei ich mich hauptsächlich auf die Benutzeroberfläche konzentriere, aber auch die zugrunde liegenden Teile langsam aktualisiere (Upgrade auf Spring, Spring Security usw.). Im Rahmen dieses Projekts haben wir uns entschlossen, das Upgrade der Benutzeroberfläche Modul für Modul in Angriff zu nehmen. Bereitstellung jedes Moduls nach Abschluss; Eine perfekte Gelegenheit, den Monolithen in einzelne Webanwendungen zu zerlegen (alle mit demselben UX-Design).

Wenn ich versuche, dies zu planen, stecke ich auf der Ebene der Authentifizierung und Autorisierung fest. Ich benötige eine übergreifende Lösung, die sich über alle Module erstreckt. Wenn ein Benutzer von einer Webanwendung zu einer anderen geleitet wird, ist dies ein nahtloser Übergang - er weiß nicht einmal, dass er sich auf verschiedenen Webanwendungen befindet. OAuth2 klingt nach der perfekten Lösung.

Ich stecke fest und versuche zu verstehen, wie man das integriert. Muss ich meinen eigenen benutzerdefinierten OAuth2-Server erstellen? Das kommt mir wie eine schreckliche Idee vor. Aber wie mache ich:

  1. Migrieren Sie alle meine Benutzerkonten und den Autorisierungsprozess auf einen OAuth2-Server eines Drittanbieters
  2. Passen Sie das Erscheinungsbild an den Rest meiner Anwendung an (nicht sicher, wie einfach / wahrscheinlich dies sein wird).
  3. Verhindern Sie das typische Popup "Anwendung XYZ möchte die Erlaubnis, auf Ihr Konto zuzugreifen ...", wenn Sie eine Verbindung über einen Server eines Drittanbieters herstellen. (Beispiel: Google OpenID, Facebook usw.).

Mein Ziel ist es, dem Benutzer einen nahtlosen Übergang vom aktuellen zum neuen Status zu bieten, aber die Möglichkeit zu bieten, separate Webanwendungen zu erstellen, die sich alle außerhalb der Webanwendung authentifizieren und autorisieren.

Eric B.
quelle
Ich frage mich, ob ein SSO ausreichen würde. OAuth scheint mir nicht das System zu sein, das Sie hier brauchen.
Werfen

Antworten:

2

Offenlegung : Ich bin Ingenieur bei Auth0 .

Es hängt von einem wichtigen Punkt ab ... Sie müssen entscheiden, ob:

  1. Sie möchten direkt viel Zeit (und indirekt Geld) für den Aufbau und / oder die Wartung Ihres eigenen Identitätsanbieters und Autorisierungsservers aufwenden
  2. oder Sie geben lieber direkt Geld aus und verwenden einen Authentifizierungsanbieter eines Drittanbieters wie Auth0.

Beide Optionen sind unter dem Gesichtspunkt Ihrer funktionalen Anforderungen durchaus realisierbar. Mit der benutzerdefinierten Entwicklung haben Sie die volle Kontrolle über die Funktionen, die Sie unterstützen möchten. Daher werde ich einen Teil der Antwort darauf konzentrieren, wie Auth0 auf die von Ihnen aufgeführten Anforderungen reagieren kann .

Bevor Sie jedoch unabhängig von Ihrer Entscheidung darauf eingehen, sollten Sie sich für die Authentifizierung auf OpenID Connect anstelle von OAuth2 konzentrieren. Letzteres ist besser anwendbar, wenn Sie planen, auch APIs im Mix zu haben und den Monolithen nicht nur in separate Webanwendungen aufzuteilen.


Wie migriere ich vorhandene Benutzer auf ein Auth0-basiertes System?

Sie können entweder entscheiden, ob Sie Ihre Datenbank weiterhin verwenden möchten, und sich auf Auth0 verlassen, um die Konformität mit den Authentifizierungsprotokollen zu gewährleisten, die Sie möglicherweise verwenden müssen, oder Sie können Ihre Benutzer auf von Auth0 verwaltete Datenbanken migrieren und sich keine Gedanken mehr darüber machen, wie Sie Kennwörter speichern und validieren.

Wenn Sie Ihre Datenbank weiterhin verwenden möchten, lesen Sie Authentifizieren von Benutzern mit Benutzername und Kennwort mithilfe einer benutzerdefinierten Datenbank

Anwendungen stützen sich häufig auf Benutzerdatenbanken zur Authentifizierung. Mit Auth0 können Sie auf einfache Weise eine Verbindung zu diesen Repositorys herstellen und diese als Identitätsanbieter verwenden, während Sie die Benutzeranmeldeinformationen beibehalten und viele zusätzliche Funktionen bereitstellen.

(Die Dokumente beziehen sich nur als Beispiel auf MySQL, andere Datenbank-Engines werden unterstützt.)

Auf der anderen Seite können Sie Benutzeranmeldeinformationen nahtlos in Auth0-Datenbanken verschieben, indem Sie den unter Migrieren von Benutzern nach Auth0 beschriebenen Migrationsprozess nutzen

Auth0 unterstützt die automatische Migration von Benutzern zu Auth0 von einer benutzerdefinierten Datenbankverbindung. Diese Funktion fügt Ihre Benutzer bei jeder Anmeldung einzeln zur Auth0-Datenbank hinzu und vermeidet, dass Ihre Benutzer aufgefordert werden, ihre Kennwörter gleichzeitig zurückzusetzen.

Sie können auch alle Ihre Benutzer in Auth0 über die Verwaltungs-API erstellen, wenn Sie möchten, dass alle Benutzer sofort unseren Kennwort-Hashing-Algorithmus verwenden. Dies hat den Nebeneffekt, dass Benutzer ihr Kennwort zurücksetzen müssen.

Wie kann ich die benutzerdefinierte zweistufige Authentifizierung weiterhin verwenden (Überprüfungsfragen)?

Die von Auth0 bereitgestellte Authentifizierungspipeline kann mithilfe von Regeln vollständig angepasst werden . Dies bedeutet, dass Sie, obwohl Sie keine protokollbezogenen Elemente implementieren mussten, die kleinen Details der Authentifizierung in Ihrer Anwendung optimieren können.

Dies beinhaltet die Möglichkeit, Ihre vorhandenen Überprüfungsfragen weiterhin als Möglichkeit für einen zweistufigen Authentifizierungsprozess zu verwenden, bei dem der Benutzer ein von Auth0 verifiziertes Erstkennwort bereitstellt und Sie dann nach weiteren Informationen aus einer benutzerdefinierten Regel fragt. (Regeln sind nur Javascript, so dass die Möglichkeiten unendlich sind)

Sie können jedoch auch entscheiden, die Überprüfungsfragen zu löschen und stattdessen Auth0 Guardian zu verwenden, um die Sicherheit des Authentifizierungsprozesses zu erhöhen.

Wie kann ich das Erscheinungsbild der Authentifizierungsoberfläche anpassen?

Mit Auth0 können Sie in kürzester Zeit eine saubere Authentifizierungs-Benutzeroberfläche erstellen, indem Sie die Standard-Anmeldeseiten oder Authentifizierungs-Widgets wie Lock verwenden . All dies unterstützt ein gewisses Maß an Anpassung, und Sie können jederzeit entscheiden, Ihre eigene Benutzeroberfläche selbst zu erstellen und stattdessen die Auth0-Bibliotheken ( Auth0.js ) der unteren Ebene zu nutzen , die keine Einschränkungen für die Benutzeroberfläche darstellen.

Weitere Informationen zur Anpassung:

Wie kann ich explizite Einwilligungsseiten verhindern?

Sie können Auth0 sowohl als Identitätsanbieter für Authentifizierungszwecke als auch als OAuth2-Autorisierungsserver (derzeit nur in den USA verfügbar) für Ihre APIs verwenden.

Als Identitätsanbieter müssen Sie sich keine Gedanken über Einwilligungsseiten machen. Der Benutzer authentifiziert sich mit seinen von Auth0 verwalteten Anmeldeinformationen und wird dann zu Ihrer Anwendung umgeleitet - fertig.

In OAuth2 als Service-Szenario enthält die Roadmap bei aktivierter Einwilligung das Umgehen von Einwilligungsseiten für bestimmte Anwendungen.


Abschließend scheint dies ein sehr interessantes und herausforderndes Projekt zu sein, also viel Glück unabhängig von Ihrer endgültigen Entscheidung.

Ich habe bereits bei einem früheren Job etwas Ähnliches durchlaufen, als ich das Authentifizierungssystem einer Legacy-Anwendung erneut implementieren musste. Wir haben unseren eigenen Identitätsanbieter und Autorisierungsserver implementiert, und um ehrlich zu sein, habe ich immer noch das Gefühl, dass wir etwas wirklich Wesentliches vergessen haben.

Ich denke, das ist das größte Problem beim Rolling Ihrer eigenen Sicherheit. Es wird Fälle geben, in denen Fristen Verknüpfungen auferlegen, und Sicherheit ist kein wirklich guter Bereich, um Verknüpfungen herzustellen.

Wenn Sie weitere Fragen haben, lassen Sie mich wissen, wenn Sie glauben, dass ich hilfreich sein könnte.

João Angelo
quelle
Danke für alle Details. Ich erinnere mich, dass ich Auth0 angeschaut habe, aber soweit ich das beurteilen kann, ist Auth0 nur eine Wolke. Ist das korrekt? Aus Sicherheits- und Datenschutzgründen beschränke ich mich darauf, nur Lösungen zu suchen, die ich in meinem eigenen Rechenzentrum / in meiner persönlichen Cloud hosten kann. Bietet Auth0 diese Option?
Eric B.
Ja, Auth0 ist sehr flexibel in Bezug auf Bereitstellung / Hosting. Die nicht öffentliche Cloud-Lösung wird derzeit als Auth0-Appliance bezeichnet. Sie können sie entweder in einem dedizierten Bereich der Auth0-Cloud, Ihrer Cloud oder Ihrem eigenen Rechenzentrum bereitstellen . Weitere Informationen finden Sie in den Appliance- Dokumenten. Wenn Sie detailliertere Informationen benötigen, lassen Sie es mich wissen. Ich kann entweder versuchen, Ihnen direkt zu helfen, oder Sie auf die richtigen Personen hinweisen.
João Angelo