Müssen Sie Ihre eigene Auth für Apps erstellen?
Ich habe viele Entwickler Fragen wie "Sollte ich meine eigene Auth für meine App erstellen?" fragen sehen. Während die Antwort nicht einfach "Ja" oder "Nein" sein kann, möchte ich einen Artikel schreiben, um die Implementierung zu zerlegen und die Vor- und Nachteile aufzuzeigen, um Ihnen bei der Entscheidung zu helfen.
Hintergrund
Ich habe viele Entwickler Fragen wie "Sollte ich meine eigene Auth für meine App erstellen?". Während die Antwort nicht einfach "Ja" oder "Nein" sein kann, möchte ich einen Artikel schreiben, um die Implementierung zu zerlegen und die Vor- und Nachteile aufzuzeigen, um Ihnen bei der Entscheidung zu helfen.
TL;DR Es ist notwendig, eine vorhandene Lösung zu finden, die Ihren Bedürfnissen entspricht, es sei denn, Sie möchten wirklich die volle Kontrolle oder Sie lernen noch Softwareentwicklung.
Einführung
Als Entwickler habe ich im Laufe meiner Karriere viele Anwendungen erstellt. Unabhängig von der Programmiersprache gibt es eine gemeinsame Basis, die ich immer erstellen muss: Benutzer-Auth.
Es war ein vernachlässigter Teil, da alles vor 20 Jahren unkompliziert war:
- Einen Registrierungs- und Anmeldesystem mit Benutzername und Passwort implementieren.
- Einen Mechanismus zur Aufrechterhaltung einer Benutzersitzung erstellen.
- Über Sicherheit? MD5 ist die Antwort.
Das war’s. Dann konnte ich mich auf das "eigentliche Geschäft" konzentrieren. Sie haben nichts von MD5 gehört? Sie haben die "guten Zeiten" der Softwareentwicklung verpasst. Heutzutage stehen Entwickler vor mehr Herausforderungen beim Erstellen von Anmeldungen/Registrierungen.
Es klingt alarmistisch, aber lassen Sie uns ein Beispiel durchgehen.
Beispiel: Ein Online-Buchladen
Nehmen wir an, Sie versuchen, einen Online-Buchladen mit einem API-Dienst und einer Web-Frontend-App zu erstellen.
Zunächst sollte der Umfang von "Auth" definiert werden. Auth kann als Authentifizierung und Autorisierung erklärt werden, und sie haben völlig unterschiedliche Definitionen und Anwendungsfälle:
Ich schrieb einen Artikel CIAM 101: Authentifizierung, Identität, SSO um diese Konzepte im Detail zu besprechen.
Wählen Sie Authentifizierungsmethoden
Beginnen wir mit der "Authentifizierung", die in unserem Beispiel die Benutzeranmeldung ist. Neben der Methode Benutzername und Passwort gibt es einige aufkommende Methoden, die Menschen für eine bessere Benutzerkonvertierung und Sicherheit annehmen:
- Passwortlos, d.h. dynamischer Verifizierungscode (über E-Mail oder SMS)
- Soziales Anmelden (Google, Facebook usw.)
Die Wahl der Methode hängt von der Geschäftsentscheidung ab, w ährend wir einen Blick auf den technischen Aufwand werfen können:
- Für passwortlos benötigen Sie einen Anbieter, um Verifizierungscodes über E-Mail oder SMS zu senden; dann integrieren Sie mit Ihrem API-Service (möglicherweise sind neue APIs erforderlich).
- Für soziales Anmelden müssen Sie sich an die Integrationsrichtlinien des sozialen Identitätsanbieters halten, den Sie verwenden möchten. Darüber hinaus müssen Sie eine Zuordnung zwischen den Benutzer-IDs Ihres Buchladens und dem Identitätsanbieter erstellen.
- Zum Beispiel, wenn ein Benutzer sich mit einem Gmail-Konto
[email protected]
anmeldet, können Sie diese E-Mail-Adresse mit dem Benutzerfoo
im Buchladen verknüpfen. Dieser Prozess hilft Ihnen, ein einheitliches Identitätssystem zu erstellen und ermöglicht es dem Benutzer, ihre soziale Identität in der Zukunft zu ändern oder zu entkoppeln.
- Zum Beispiel, wenn ein Benutzer sich mit einem Gmail-Konto
Entwerfen und Implementieren Sie das Anmeldungserlebnis
Nachdem Sie die Authentifizierungsmethoden entschieden haben, ist ein angenehmes und reibungsloses Anmeldungserlebnis für Ihre Endbenutzer das nächste Ziel. Die Konversion hier ist grundlegend, aber entscheidend für das Geschäft, da es eine natürliche Möglichkeit ist, die beständigen Kundendaten zu hinterlassen.
Als ich für Airbnb arbeitete, gab es ein ganzes Team, das darauf spezialisiert war, das Anmeldungserlebnis für mehrere Plattformen zu optimieren. Sie führten zahlreiche A/B-Tests durch, um zu ermitteln, welche Kombination die höchste Konversionsrate hatte.
Es ist nicht praktisch, dies zu tun, wenn ein Geschäft gerade erst beginnt. Aber wir müssen trotzdem unser Bestes geben, um jedes Stück richtig zu machen. Auf welchen Plattformen möchten Sie den Buchladen betreiben? Sie können mit mobil, web oder beidem beginnen. Das genaue Design hängt von den Authentifizierungsmethoden ab, die Sie wählen:
- Benutzername und Passwort: Das einfachste, nur einige Eingabefelder und Tasten.
- Passwortlos: Geben Sie Telefon / E-Mail ein, senden Sie dann einen dynamischen Code und überprüfen Sie ihn.
- Soziales Anmelden: Lesen Sie die Dokumentation des gewählten sozialen Identitätsanbieters, folgen Sie der visuellen Anleitung, behandeln Sie die Umleitungslogik und verknüpfen Sie schließlich die soziale Identität mit der Buchladenidentität.
Mehr Dinge zu berücksichtigen, um es besser zu machen:
- Müssen Sie den Anmelde- und Registrierungsprozess für eine bestimmte Methode kombinieren?
- Benötigen Sie einen "Passwort vergessen"-Fluss, um Kunden das eigenständige Zurücksetzen ihrer Passwörter zu ermöglichen?
Wenn Sie sich für die native Entwicklung entscheiden, wird der Arbeitsaufwand für eine zusätzliche Plattform fast verdoppelt.
Sicherheit und Tokenaustausch
Sicherheit kann ein versteckter Eisberg sein. Es ist großartig, wenn Sie mit OpenID Connect oder OAuth 2.0 vertraut sind, da sie weit verbreitet und im Kampf erprobt sind. OpenID Connect ist relativ neu, aber für "Benutzerauthentifikation" konzipiert, was für einen Online-Buchladen gut geeignet ist.
Ohne in die Details der Standards einzudringen, gibt es trotzdem einige Dinge zu überlegen:
- Welche Verschlüsselungsmethode sollte für Passwörter verwendet werden?
- Wie ist der Prozess für die Standardauthentifizierung und -autorisierung?
- Wie funktioniert der Tokenaustausch (Access Token, Refresh Token, ID Token usw.)?
- Wie können Schlüssel in Tokens verwendet werden und wie kann die Signatur validiert werden, um Ressourcen zu schützen?
- Wie kann Angriffen auf Client und Server vorgebeugt werden?
Schließlich können Sie ein gutes Anmeldungserlebnis landen und es Ihren Kunden liefern.
Autorisierungsmodell
Als Buchladen müssen Sie Ressourcen für Kunden und Verkäufer trennen. Zum Beispiel können Kunden alle Bücher durchsuchen, während Verkäufer ihre zum Verkauf stehenden Bücher verwalten können. Es ist in Ordnung, mit einfachen if-else-Checks zu beginnen; jedoch können Sie, wenn das Geschäft wächst, ein flexibleres Modell wie die rollenbasierte Zugriffssteuerung (RBAC) oder die attributbasierte Zugriffssteuerung (ABAC) nutzen müssen.
Ich schrieb auch einen Artikel CIAM 102: Autorisierung & rollenbasierte Zugriffssteuerung um grundlegende Autorisierungskonzepte und das RBAC-Modell zu demonstrieren.
Treffen Sie die Entscheidung
Sie können sehen, dass Auth kein "alles oder nichts" Problem ist, da es mehrere technische Komponenten beinhaltet und Sie oder Ihr Team unterschiedliche technische Kenntnisse in diesen Bereichen haben können. Es ist wichtig, es in kleinere Teile zu zerlegen, um ein besseres Verständnis des Ist-Zustands zu erhalten.
Um die Entscheidung zu treffen, würde ich mir folgende Fragen stellen:
- Wie dringend ist das Projekt?
- Wie viel Aufwand erwarte ich, in die Auth im Vergleich zum Geschäft zu stecken?
- Wie hoch ist die Priorität von Benutzererfahrung, Sicherheit und Wartbarkeit?
- Welche Teile muss ich vollständig kontrollieren? Wie vertraut sollte ich damit werden?
- Wenn ich mit einigen Frameworks / Lösungen gehe, sind sie gut genug für Anpassungen oder Erweiterungen?
- Werde ich bei Geschäftswachstum ein neues Authentifizierungsmodell einf ühren müssen?
- Wenn ich einen geeigneten Anbieter finde, ist es sicher genug, ihn zu verwenden? Brauche ich einen Rückzugplan, wenn etwas mit dem Anbieter passiert?
Mit diesen Fragen im Hinterkopf stellte ich zwei Fakten fest:
- Die Erstellung eines zuverlässigen Authentifizierungssystems ist sehr komplex.
- Bestehende Anbieter erfüllen nicht alle notwendigen Kriterien.
Deshalb habe ich beschlossen, ein spezielles Projekt (Logto) für Auth zu starten und von Anfang an die Open-Source-Community zu umarmen.
Hoffe, dieser Artikel hilft.