Die Mitgliederverwaltung für den Verein Bernina Fighters war ursprünglich meine Diplomarbeit für das eidgenössische Diplom als NDS HF Applikationsentwicklerin.Von Anfang an war klar, dass diese App nicht einfach nach Abschluss meines Studiums verstauben würde. Sie birgt weiterhin grosses Potenzial und ich plane, sie kontinuierlich weiterzuentwickeln.
Da die App derzeit nur lokal auf einem Client verwendet wird, habe ich bisher noch keinen Login integriert. Das möchte ich nun ändern, um die App in Zukunft zu hosten. Dadurch kann ich den Zugriff schützen, und nur autorisierte Benutzer werden Zugang zu den Daten haben.
Die Anforderungen
- Sicher
- Kostenlos
- Einfach integrierbar
- Minimalistisch
Evaluierung
Zuerst plante ich, die Authentifizierung eigenständig zu programmieren. Dies hätte jedoch die Implementierung einer eigenen Benutzerverwaltung und verschiedener Benutzerrollen bedeutet, was den Anforderungen an einfache Integrierbarkeit und Minimalismus widersprochen hätte. Für die App wäre dies bereits überdimensioniert. Da die Anzahl der Benutzer voraussichtlich nie sehr hoch sein wird – maximal 2 Personen, die die Verwaltungsaufgaben durchführen –, habe ich mich dagegen entschieden.
Es gibt jedoch Dienste, die eine Benutzerauthentifizierung anbieten. Diese Dienste stellen oft einen kostenlosen Plan für kleine Anwendungen zur Verfügung und eignen sich daher besonders gut für kleine Hobby- oder private Anwendungen mit wenigen Benutzern. Sobald die Benutzerzahl steigt, ist ein Wechsel zu einem kostenpflichtigen Plan erforderlich, was schnell sehr teuer werden kann.
Beispiel Services
Beide Dienste bieten einen Freeplan an. Damit kann ich meine Webapplikation und meinen API-Server schützen. Ich habe mich für Firebase entschieden, da ich bereits Erfahrung mit Firebase habe.
Firebase Auth
Firebase bietet mir einen einfachen Login mit E-Mail und Passwort an. Es besteht auch die Möglichkeit, sich über Google oder andere Drittanbieter anzumelden. Darüber hinaus stellt Firebase eine User-Admin-Konsole bereit, über die ich Benutzer erstellen und verwalten kann. Somit entfällt die Notwendigkeit, dies eigenständig zu programmieren.
Authentifizierungs-Anbieter

User Admin Konsole

Mit NPM konnte ich Firebase im Client und auf dem API Server problemlos installieren.
Anleitung zur Installation der Webappliaktion –> Firebase Installationsanleitung
Wie funktioniert die Firebase Authentifizierung im Client?
Nach der Installation und Konfiguration von Firebase im Client wird der Benutzer mithilfe der Methode signInWithEmailAndPassword() mit seinen Anmeldedaten eingeloggt. Wenn die Anmeldedaten mit denen in der Admin-Konsole übereinstimmen, erhält man einen Firebase-Token des Typs JWT (JSON Web Token) zurück. Mit diesem Token können nun Anfragen an den API-Server gesendet werden. Dieser Token muss bei jedem Request im Header mitgegeben werden.
Mit der Methode signOut() wird der Benutzer ausgeloggt, und der Token im Browser wird entfernt. Der Benutzer ist nun ausgeloggt.

Wie funktioniert die Firebase Authentifizierung auf dem API Server?
Auf dem Server habe ich eine Middleware geschrieben, die auf jeder Route überprüft, ob ein gültiger Token im Request-Header mitgeschickt wurde. Mit der Funktion verifyIdToken() wird die Gültigkeit des Firebase-Tokens überprüft. Falls dieser ungültig oder nicht vorhanden ist, wird ein Fehler zurückgeschickt.
Firebase Dokumentation verify ID Tokens

Fazit
Die Integration von Firebase war weniger aufwendig als gedacht. Dennoch musste ich einige Anpassungen vornehmen. Für kleinere Anwendungen kann ich Firebase sehr empfehlen, da es einem viel Zeit ersparen kann. Vor allem die Programmierung einer eigenen Benutzerverwaltung konnte ich dadurch umgehen.