2017-08-08 2 views
1

Ich entwickle eine große API-Oberfläche mit ServiceStack und befasse mich mit der Frage der Autorisierung. Endbenutzer benötigen die Möglichkeit, die Rechte für verschiedene Rollen auf API-Anfrageebene anzupassen, d. welche Anforderungsnachrichten/http-Verben diese Rolle aufrufen kann.Feinkörnige Autorisierung in ServiceStack API

Aus diesem Grund beabsichtige ich, Rollen außerhalb des Codes zu halten und nicht ServiceSacks RequiresRole-Attribut zu verwenden. Ich plane, Rollen/Erlaubnis-Beziehungen in der Datenbank zu speichern.

Ich benutze auch JWT. Wegen der großen Größe der API bin ich besorgt über die Verwendung des RequiresPermission-Attributs mit dem integrierten Berechtigungssystem von ServiceStack, da ich weiß, dass Berechtigungen in der JWT gefüllt sind und ich die Header nicht zu sehr aufblähen werde. Benutzer können Hunderte oder sogar Tausende von Berechtigungen haben.

Ich erwäge

1) Speichern Ansprüche Benutzerrolle, aber nicht die Erlaubnis Ansprüche im JWT.
2) Erstellen eines benutzerdefinierten Anforderungsfilters, der überprüft, ob der Benutzer die erforderliche Berechtigung (aus der zwischengespeicherten DB-Tabelle) basierend auf seiner Rolle in der JWT hat.

Hört sich das nach einem vernünftigen Ansatz zur Implementierung meiner Autorisierungsanforderungen in ServiceStack an? Welche Nachteile kann ich vermissen? Gibt es eine Möglichkeit, meine Ziele mithilfe der integrierten ServiceStack-Autorisierungstools zu erreichen, ohne auf einen benutzerdefinierten Anforderungsfilter zurückgreifen oder meine JWTs zu sehr aufblähen zu müssen?

Antwort

1

Ja, das klingt nach einem vernünftigen Ansatz. Wenn Sie JWT verwenden, sollten Sie die Anzahl der Rollen/Berechtigungen eines Benutzers beachten, da sich dies auf die Payload-Größe jeder Anfrage auswirkt Die Trennung von ServiceStacks Rollen/Berechtigungen ist ein guter Ansatz.

Verwandte Themen