/projekte/auth-api-service/Backend/Live/11/2024 → laufend/Alleinentwickler

Auth API Service

Auth-Service mit JWT, Refresh-Token-Rotation und Rollenrechten für mehrere eigene Anwendungen.

Privates Projekt

Interner Dienst — er hängt hinter den Anwendungen, die ihn nutzen, und hat keine eigene Oberfläche.

project dossier

Snapshot

auth-api-service

Alleinentwickler

category

Backend

status

LIVE

stack

6 tech

features

3
Node.jsTypeScriptPostgreSQLPrismaJWTOAuth
01

Story

Problem

Mehrere eigene Anwendungen brauchten dieselbe Authentifizierung und Rollenlogik.

Lösung

Auth-Service mit JWT- und Refresh-Token-Flow, rollenbasierten Rechten und Prisma-Datenmodell auf PostgreSQL.

Learnings

Refresh-Token-Rotation und Sitzungsablauf machen bei Auth die eigentliche Arbeit, nicht der Login selbst.

02

Key Features

features.md
  • →JWT mit Refresh-Token-Rotation und Rollenrechten
  • →Datenmodell und Migrationen über Prisma
  • →Einheitliches Logging und Fehlerbehandlung
03

Über das Projekt

README.md

Zentraler Auth-Service für mehrere eigene Anwendungen: JWT mit Refresh-Token-Rotation, rollenbasierte Rechte und definierter Sitzungsablauf. Datenmodell und Migrationen über Prisma auf PostgreSQL, dazu einheitliches Logging und Fehlerbehandlung.

04

Meine Rolle

rolle
rolle:Alleinentwickler
  • Token-Ablauf mit Zugriffs- und Erneuerungstoken inklusive Rotation
  • Datenmodell für Konten, Rollen, Sitzungen und ausgegebene Token in Prisma
  • Rollenbasierte Rechte für mehrere angebundene Anwendungen
  • Einheitliches Logging und Fehlerformat
05

Architektur

architecture.md

Ein Dienst, mehrere Anwendungen. Statt in jeder Anwendung erneut Login, Rollen und Sitzungslogik zu bauen, gibt es eine Stelle, die Token ausstellt und prüft — die Anwendungen selbst kennen nur noch das Token.

Der Ablauf trennt zwei Token mit unterschiedlicher Lebensdauer: ein kurzlebiges Zugriffstoken, das die Anwendungen ohne Rückfrage prüfen können, und ein langlebiges Erneuerungstoken, das ausschließlich gegen den Auth-Dienst eingetauscht wird. Bei jedem Eintausch wird das alte Erneuerungstoken ungültig und ein neues ausgegeben — Rotation statt Dauergültigkeit.

Datenmodell und Schemaverlauf liegen in Prisma auf PostgreSQL: Konten, Rollen, Sitzungen und ausgegebene Erneuerungstoken. Logging und Fehlerformat sind einheitlich, damit ein Fehlerbild in allen angebundenen Anwendungen gleich aussieht.

Token-Ausgabe

Anmeldung und Ausstellung von Zugriffs- und Erneuerungstoken; Zugriffstoken sind kurzlebig und ohne Rückfrage prüfbar.

Node.jsJWT

Erneuerung mit Rotation

Jeder Eintausch entwertet das alte Erneuerungstoken und gibt ein neues aus. Ein zweiter Eintausch desselben Tokens ist damit ein erkennbarer Vorfall.

TypeScriptPostgreSQL

Rollen und Rechte

Rollenbasierte Rechte zentral gepflegt, von den angebundenen Anwendungen nur ausgelesen.

PrismaPostgreSQL

Sitzungen

Definierter Ablauf und die Möglichkeit, eine Sitzung serverseitig zu beenden — auch bevor das Zugriffstoken abläuft.

PostgreSQL

Protokoll und Fehlerbild

Einheitliches Logging und ein gemeinsames Fehlerformat über alle Endpunkte.

TypeScript
06

Herausforderungen

Der Login ist der einfache Teil
Problem

Ein Login gegen eine Passwort-Hash-Tabelle ist an einem Nachmittag gebaut. Die Arbeit steckt danach: Wie lange gilt ein Token, wie wird es erneuert, was passiert, wenn ein Erneuerungstoken abhandenkommt, und wie beendet man eine Sitzung, bevor das Zugriffstoken abgelaufen ist.

Lösung

Zwei Token mit getrennter Lebensdauer, Rotation bei jedem Eintausch und Sitzungen als eigener Datensatz. Erst damit ist ein serverseitiger Rausschmiss überhaupt möglich — ein reines JWT allein lässt sich nicht zurücknehmen.

Dieselbe Rollenlogik in jeder Anwendung
Problem

Solange jede Anwendung ihre eigenen Rollen führt, laufen die Stände auseinander: Eine Rechteänderung wirkt in der einen Anwendung und in der anderen nicht — und niemand merkt es, bis jemand etwas sieht, das er nicht sehen sollte.

Lösung

Rollen und Rechte liegen im Auth-Dienst und werden den Anwendungen im Token mitgegeben. Geändert wird an einer Stelle; die Anwendungen lesen nur.

Kurze Tokenlaufzeit gegen ständiges Neuanmelden
Problem

Kurzlebige Zugriffstoken sind sicherer, erzwingen aber häufiges Erneuern. Macht man sie lang, bleibt ein gestohlenes Token lange brauchbar.

Lösung

Kurze Zugriffstoken plus stiller Erneuerung im Hintergrund. Der Nutzer merkt nichts, das Zeitfenster für ein abhandengekommenes Zugriffstoken bleibt klein, und der Missbrauch eines Erneuerungstokens fällt über die Rotation auf.

07

Technologie-Entscheidungen

08

Verwandte Projekte