2015-09-30 3 views
11

Ich habe eine Laravel-REST-API, die tymondesigns/jwt-auth zur Authentifizierung verwendet und die Anwendung von der Einzelserver- auf die Multiserverkonfiguration skalieren möchte, mit einem Load Balancer im Vordergrund.Kann Jwt-Auth in Laravel ungültige Tokens in einer Multi-Server-Konfiguration behandeln?

Der Fluss verwendet RefreshToken Middleware und im Wesentlichen ein Token wird nach jeder Anfrage ungültig und ein neues wird mit der Antwort zurückgegeben. (https://github.com/tymondesigns/jwt-auth/wiki/Authentication)

Wie wird jwt ungültige Tokens in einer Multiserverkonfiguration verwalten, in der das Token mit einem Server ungültig gemacht wird und eine neue Anfrage mit dem ungültigen Token auf einem anderen Server ausgeführt wird?

+1

Warum sollte eine neue Anfrage mit einem ungültigen Token gehen? Erhält der Benutzer nicht das neue gültige Token? – Alex7

+1

das ist genau das Sicherheitsproblem. Wenn ein Hacker ein ungültiges Token in die Hände bekommt (ohne zu wissen, wie er es erhält), wird dieses Token möglicherweise nicht für einen anderen Server in der Cluster-Konfiguration ungültig gemacht. Daher kann er gültige Anfragen verwenden. – Danny

Antwort

2

Der richtige Weg wäre, eine jti claim zusammen mit exp und iat Ansprüche aufzunehmen.

Eine andere Möglichkeit ist (wenn möglich), eine Server-ID (oder einen eindeutigen Schlüssel) in Ihr Token aufzunehmen. Sie können ein Server-zu-Server-JWT-Protokoll implementieren, aber ich denke, das wäre teuer.

Eine andere Möglichkeit besteht darin, dass Sie die Tokens zwischen Ihren Servern synchronisieren müssen. Ich würde einen Memcached-Daemon (vielleicht auf Ihrem Front-Server) verwenden, der eine Liste neu invalidierter Token verwaltet. Wenn das Token nur für eine Anforderung gültig ist, erhält das Memcached das ungültig gemachte Token, sobald es verwendet wird (möglicherweise direkt in der RefreshToken-Middleware). Anhand des Token-Zeitstempels können Sie entscheiden, ob das Token ungültig ist (ohne zum memcached-Server zu gehen), oder wenn es ziemlich neu ist, werden Sie in der Memcached-Liste konsumierte Tokens einchecken. Das Memcached hat auch eine Verfallszeit. Es gibt viele Vorteile dieser Methode (Sie können z. B. Tags verwenden). Wenn Sie diese Liste als eine Protokolldatei betrachten, können Sie immer noch sagen, dass Sie das zustandslose Prinzip nicht ungültig gemacht haben :)

Hoffe, dass hilft.

+0

sollte dies akzeptiert worden sein. Ging meine alten Fragen durch. Besser spät als nie. – Danny