Wie stellt man ein Multi-Tenant-Zugangsverwaltungssystem bereit?

Feb 11, 2021


Die Antwort ist nicht so einfach, daher werden wir die Frage zunächst in kleinere Teile aufteilen und dann in der Schlussfolgerung die Antwort geben.

Was wollten wir erreichen?

1. Ein vollständig entwickeltes System für die Erstellung von Benutzerkonten und die Möglichkeit, dass sich die Benutzer mit ihren E-Mail-Adressen oder externen Identitätsanbietern wie Facebook und Google anmelden können.

2. Das System sollte auf mehreren Domänen einsetzbar und leicht zu pflegen sein und gleichzeitig die Benutzer aus verschiedenen Domänen in einer einzigen Datenbank verwalten. Das bedeutet, dass ein Benutzer mit einer E-Mail-Adresse in zwei verschiedenen Domänen als ein anderer Benutzer betrachtet wird.

Welche Möglichkeiten haben wir in Betracht gezogen?

Wir haben in Erwägung gezogen, ein System zur Verwaltung des Benutzerzugangs von Grund auf neu aufzubauen. Das bedeutet, dass wir alle unten aufgeführten Funktionen manuell implementieren müssten:

  • Authentifizierung der Benutzer;
  • Jedes Mal ihre Anmeldedaten aktualisieren;
  • Datensicherheit;
  • Verschlüsselung der Daten;
  • Versenden der Bestätigungs-E-Mail;
  • Funktionen zum Vergessen/Rücksetzen des Passworts;
  • Versand von E-Mails mit vergessenem/zurückgesetztem Passwort;
  • Skalierbarkeit.

Glücklicherweise haben wir ein wenig recherchiert und herausgefunden, dass Amazon Cognito alle oben genannten Funktionen mit nur wenigen Klicks bereitstellen kann.

Amazon Cognito ist ein Service, der eine einfache und sichere Benutzerverwaltung bietet. Er unterstützt die Anmeldung bei Identitätsanbietern wie Facebook und Google und ist eine kostengünstige Lösung.

Wie funktioniert Amazon Cognito?

Amazon Cognito ist wirklich einfach einzurichten und zu nutzen. Sie fordern einfach den entsprechenden Cognito-Benutzerpool an, um die Token abzurufen, und verwenden diese Token für den Zugriff auf Ihre Anwendung. In unserem Fall, da wir API Gateway verwenden, richten wir den Cognito User Pool als Autorisierer in jeder Methodenanforderung ein, die zum privaten Bereich der Anwendung führt, der nur für angemeldete Benutzer zugänglich ist. Ein ähnliches Beispiel ist in der folgenden Grafik dargestellt:

how-to-provide-user-access-management-system-the-multi-tenant-way-2.webp

Wie wird es gemacht?

Die vollständige Lösung umfasst einen Microservice, der auf ECS bereitgestellt wird. Der Microservice verwaltet die Erstellung von Benutzern im entsprechenden Cognito User Pool und gibt Login-Token und persönliche Daten für den authentifizierten Benutzer zurück.

Wenn ein Benutzer ein Konto erstellt oder sich anmeldet, werden die Attribute der Domäne zusammen mit den Anmelde-/Registrierungsdaten weitergeleitet. Anschließend stellt der Dienst die Autorisierungs-Token aus dem entsprechenden Cognito User Pool aus. Vor dem Microservice richten wir zwei API-Gateways ein. Eines davon bedient die öffentlich zugänglichen APIs wie die Registrierungs- und die Login-API, die keinen autorisierten Zugriff erfordern. Das andere API-Gateway hat Cognito User Pool als Autorisierer eingestellt.

how-to-provide-user-access-management-system-the-multi-tenant-way-3.webp

Und wie haben wir das Problem der Mehrmandantenfähigkeit gelöst?

  • Für jede Domäne haben wir verschiedene Stufen auf dem API-Gateway erstellt;
  • Für jede Stufe haben wir einen separaten Cognito User Pool erstellt.

Hätten wir uns für einen Einzelbenutzer-Pool mit allen Benutzern an einem Ort entschieden, hätten wir die Anmeldung mit Benutzernamen und Passwort statt mit E-Mail-Adresse und Passwort erlaubt. Dies würde uns auch daran hindern, die Anmeldung über föderierte Identitätsanbieter zu ermöglichen. Um eine föderierte Anmeldung anbieten zu können, müssten wir eine große Menge an benutzerdefinierter Logik neu schreiben.

how-to-provide-user-access-management-system-the-multi-tenant-way-4.webp

Um diese möglichen Nachteile zu überwinden, haben wir für jede Domäne einen eigenen Cognito User Pool erstellt und angepasst. Letztendlich speichern wir die Benutzer immer noch in einer einzigen Datenbank, aber wir haben unterschiedliche Benutzerpools pro Domäne.

Fazit

Die Verwendung von Amazon Cognito für die Benutzerauthentifizierung ist viel einfacher und effizienter als die Erstellung eines eigenen Authentifizierungsdienstes von Grund auf. Und was am wichtigsten ist: Sie müssen sich keine Gedanken über die Sicherheit oder Verschlüsselung der Daten machen.

Mehrere Domains in einem einzigen Benutzerpool zu haben, war in unserem Fall nicht möglich, da wir wollten, dass die Anmeldung nur mit einer E-Mail-Adresse oder über Facebook / Google erfolgt. Aus diesem Grund haben wir uns für mehrere Benutzerpools entschieden.

Und nicht zuletzt haben wir uns für ein API-Gateway pro Umgebung mit mehreren Stufen für jede Domäne entschieden, um die Erstellung mehrerer Ressourcen und die zusätzliche Wartungsarbeit zu reduzieren.

Irena Spiridonova

Irena Spiridonova

Buchen Sie eine kostenlose Beratung

Wählen Sie Ihre Branche*

Bitte wählen Sie Ihre Branche*

Wählen Sie Ihren Servicetyp

Bitte wählen Sie Ihren Servicetyp

calendarWann passt es Ihnen am besten für ein kurzes Gespräch

Die mit * gekennzeichneten Felder sind Pflichtfelder

Alle Beiträge anzeigen