Ich verwende JWT-Token in HTTP-Headern, um Anforderungen an einen Ressourcenserver zu authentifizieren. Der Ressourcenserver und der Authentifizierungsserver sind zwei separate Arbeiterrollen in Azure.
Ich kann mich nicht entscheiden, ob ich die Ansprüche im Token speichern oder auf andere Weise an die Anfrage / Antwort anhängen soll. Die Anspruchsliste wirkt sich auf das Rendern clientseitiger Benutzeroberflächenelemente sowie auf den Zugriff auf Daten auf dem Server aus. Aus diesem Grund möchte ich sicherstellen, dass die vom Server eingegangenen Ansprüche authentisch und validiert sind, bevor die Anfrage bearbeitet wird.
Beispiele für Ansprüche sind: CanEditProductList, CanEditShopDescription, CanReadUserDetails.
Die Gründe, warum ich das JWT-Token für sie verwenden möchte, sind:
- Besserer Schutz vor clientseitiger Bearbeitung von Ansprüchen (z. B. Hacking Claims List).
- Es ist nicht erforderlich, die Ansprüche bei jeder Anfrage nachzuschlagen.
Die Gründe, warum ich das JWT-Token nicht verwenden möchte:
- Der Authentifizierungsserver muss dann die app-zentrierte Anspruchsliste kennen.
- Das Token wird zu einem einzigen Punkt des Hack-Eintrags.
- Ich habe einige Dinge gelesen, die besagen, dass JWT-Token nicht für Daten auf App-Ebene gedacht sind.
Es scheint mir, dass beide Nachteile haben, aber ich neige dazu, diese Behauptungen in das Token aufzunehmen und möchte dies nur von Leuten ausführen lassen, die sich zuvor damit befasst haben.
ANMERKUNG: Ich verwende HTTPS für alle API-Anforderungen, daher scheint mir das Token "sicher genug" zu sein. Ich benutze AngularJS, C #, Web API 2 und MVC5.
quelle
Antworten:
Ich speichere nur Identifizierungsansprüche (Benutzer-ID usw.) (verschlüsselt) in meinem JWT.
Wenn ich dann das Token auf dem Server (API) erhalte, kann ich eine serverseitige Suche durchführen (DB oder API-Aufruf des lokalen Netzwerks) und alle Zuordnungen zur Benutzer-ID (Apps, Rollen usw.) abrufen.
Wenn Sie jedoch mehr in das JWT schreiben möchten, achten Sie einfach auf die Größe, da diese wahrscheinlich bei jeder Anforderung gesendet wird. Achten Sie jedoch darauf, vertrauliche Forderungsdaten zu verschlüsseln.
quelle
Es hört sich so an, als ob die Authentifizierung (wer der Benutzer ist) und die Autorisierung (was der Benutzer tun darf) nicht so klar voneinander getrennt sind, wie Sie es möchten.
Wenn Sie nicht möchten, dass der Authentifizierungsserver weiß, zu was der Benutzer berechtigt ist, begrenzen Sie die Ansprüche in diesem JWT auf die Benutzer-ID, wie von wchoward vorgeschlagen. Ein anderer Server, der als Autorisierungsserver bezeichnet wird, kann nachschlagen, worauf der Benutzer Anspruch hat.
Der Autorisierungsschritt kann vom Ressourcenserver ausgeführt werden, wenn ihm vom Client zum ersten Mal ein Authentifizierungstoken vorgelegt wird. Der Ressourcenserver sendet dann ein Token mit Berechtigungsansprüchen an den Client.
Hinweis: Beide JWTs sollten mit unterschiedlichen Schlüsseln signiert sein.
Vorteile:
Con:
quelle