Cognitor
IAMAuthentifizierungMacroservice
Disclaimer: Dieses Projekt ist Teil von meiner Arbeit bei anny und vollständig Closed Source. Ich möchte dieses Projekt jedoch einzeln hervorheben, da es ein sehr spannendes Projekt war, an dem ich zum größten Teil alleine gearbeitet habe.

TL;DR:
- Zentrales IAM für die anny Platform
- Umgesetzt mit Laravel
- SAML-fähig, angeschlossen and DFN-AAI und andere Föderationen
- SSO mit Google, Microsoft & Apple
- Login über verschiedene Provider möglich
- Attribute Mapping von SAML Attributen
Problem:
- Für Universitätskunden mussten wir den Login mittels DFN-AAI ermöglichen (SAML Protokoll)
- Systeme auf dem Markt waren zu kompliziert oder konnten nicht das was wir noch zusätzlich brauchten für die Authentifizierung (Okta, OAuth0, Ory Hydra)
Beschreibung
- Bei anny standen wir an dem Punkt, dass wir ein neues Authentifizierungssystem brauchen
- Bisher haben wir Laravel Passport verwendet, um unsere Frontends mit API Token zu versorgen
- Wir wollten jedoch nun eine langfristige Lösung haben, um auch andere Plattformen anzubinden, deswegen war klar: Wir benötigen einen eigenen Macroservice um die gesamte Authentifizierung zu übernehmen
- Es stellte sich die Businessfrage: Buy or Build?
- Nachdem ich verschiedene Produkte getestet hatte (Okta, OAuth0, Ory Hydra, und einige mehr), habe ich entschieden, dass ich das selbst baue
- Zugegeben: etwas naiv, aber ich war hochmotiviert
- Aus der Vergangenheit hatte ich bereits einiges Erfahrung mit Laravel Passport und dem OAuth2 Protokoll. Jedoch noch nicht so viel Erfahrung mit SAML
- Ich habe mich dann stundenlang in dieses Protokoll eingelesen, damit ich den Login über die Föderation DFN-AAI ermöglichen kann
- Die DFN-AAI ist eine Föderation für Hochschulen und Universitäten und wir von nahezu jeder Hochschule in Deutschland verwendet
Umsetzung
- Das Projekt ist mit Laravel & Inertia.js umgesetzt
- Als Basis zum Generieren von API Tokens nutzt das Projekt Laravel Passport
- Zudem nutzt es das php-saml Paket, um mit SAML Request und Response umzugehen
- Ich habe ein zusätzliches Paket für Laravel geschrieben um mit JWT Tokens von einem externen IAM umzugehen und User einzuloggen und zusätzliche Claims an diese Token zu attachen
Ergebnis
- Wir haben ein IAM Macroservice, welcher diverse Login Möglichkeiten hat
- Login über Third Party Services wie Google, Microsoft, Apple (Auch für Mobile Apps)
- Login übers DFN-AAI möglich und schnelle Anbindung von Universitäten
- Login über generischen SAML Identity Provider
- Login über OAuth2 Identity Provider
- Attribute Mapping mit SAML möglich
- Eigene Einrichtung des SSO möglich
Was habe ich gelernt
- Sehr viel über SAML und Authentifizierung und wie man ein IAM baut