Authentifizierung in Microservices sinnvoll umsetzen

Aktuell arbeite ich an einer neuen Software für eines meiner Unternehmen, die auf Microservices basiert. Da die Anzahl der Microservices mit der Zeit wachsen wird, bin ich auf ein Problem gestoßen, das sicher nicht neu ist, aber vielleicht meine Lösung.

Das Problem

Meine Software habe ich so aufgebaut, dass es einen Authentifizierungs-Service gibt, über den ein Login mit E-Mail und Passwort möglich ist. Das kennt man ja so von jeder Cloud-Anwendung. Da ich aber mehrere Services haben werde, die auf unterschiedlichen Servern laufen, müsste jeder dieser Serivces beim Authentifizierungs-Service anfragen, ob der aktuelle User authentifziert ist. Das würde mit steigender Nutzer- und Service-Anzahl zu einer erheblichen Anfrage-Last führen. Natürlich könnte man einfach die Server-Leistung hochskalieren, aber das ist nur bis zu einem gewissen Punkt möglich und irgendwann auch kostentechnisch nicht mehr sinnvoll.

JWT-Token verwenden

Wie lassen sich also die Anfragen an den Authentifizierungs-Service reduzieren?

Mit Hilfe von JWT-Tokens (JSON Web Token) ist das möglich. JWT-Tokens sind dafür gedacht, um die Identität eines Users bei einem Authentifizierungs-Server (Identity provider) zu verifizieren. Sie können aber auch für Stateless-Sessions verwendet werden. Ich habe also noch einen weiteren Vorteil: Wenn die API der Anwendung zB. für eine Smartphone-App genutzt werden soll, kann der JWT-Token direkt genutzt werden. Eine Anpassung an der API, um diese „Smartphone-tauglich“ zu machen, dürfte dann auch nicht mehr erforderlich sein. Das muss auch keine Smartphone-App sein, sondern kann irgendeine Anwendung eines Drittanbierters sein, welcher eben die API meiner Anwendung nutzen möchte.

Warum das funktioniert? Weil die Gültigkeit des Tokens von jedem Microservice (oder Client, wenn man so will) verifiziert werden kann. Es muss also der Token bei jedem Request an jeden Microservice mitgesendet werden, der Service prüft dann anhand eines Private Keys, ob dieser gültig ist. Eine Anfrage an den Authentifizierungs-Server ist dann nicht mehr erforderlich.

Weitere Infos

Leave a reply:

Your email address will not be published.