2016-10-31 2 views
1

Meine App verwendet die rollenbasierte Zugriffssteuerung und prüft die Berechtigungen, die sie bitweise Operationen verwendet. Der Pseudo-Code ist so etwas wie:OAuth 2 Bereiche mit Dezimalzahl zur Verwendung der bitweisen Maske

function HasPermission(userPermission, permissionBitMask) { 
    return (userPermission& permissionBitMask) != 0; 
} 

Jetzt habe ich beschlossen, zu OAuth 2 zu wechseln wird JWT verwenden. Gemäß der Spezifikation der OAuth 2:

Scope wird als eine Reihe von Groß- und Kleinschreibung durch Leerzeichen getrennte ausgedrückt Saiten.

Aber ich möchte Umfang als Nummer angeben, so statt:

{ 
    scope: ["item:create", "item:view", "product:view"] 
    // or an object based structure 
} 

möchte ich nutzen, um:

{ 
    scope : 7 
} 

Ist dieser Entwurf akzeptabel, was würde ich vermissen, wenn ich Verwenden Sie stattdessen Zeichenfolgen mit Groß-/Kleinschreibung. Ich nehme an, dass die bitweise Operatormethode leistungsfähiger sein sollte als der Stringvergleich und die Suche, die im letzteren Fall benötigt würden.

Antwort

1

Aus der Perspektive von JWT wäre der Ansatz in Ordnung, da die Werte der Ansprüche alle JSON-Typen sein können, also sind die Zahlen in Ordnung.

Bei JWTs können Anspruchswerte zwar beliebige Zeichenfolgen, aber beliebige JSON-Typen sein.

(Quelle:. JSON Web Token (JWT)

Wenn Sie jedoch eine Anforderung mit OAuth2 konform zu bleiben, dann wäre Ihr Vorschlag nicht akzeptabel konform Der Aufenthalt kann von Vorteil sein, wenn Sie mit Ihrem eigenen Autorisierungsserver gestartet werden soll, aber möchten, dass Ihre Optionen offen zu halten und leicht zu wechseln entweder einem Dritt Autorisierungs-Server von Ihnen oder einer Cloud-Authentifizierungsanbieter wie Auth0 gehostet (Disclosure: ich bei Auth0 arbeiten).

Wenn ich Sie wäre, würde ich bleiben OAuth2 konform, auch wenn ich keine Pläne für Swi hatte Implementierungen. Es sollte einfach sein, eine Transformation von mehreren string Werten in die Ganzzahl zu implementieren, die zur Darstellung der Berechtigungen verwendet wird. Im allgemeinen Szenario würde diese einfache Transformation nie die Performance-Engpass Ihrer Anwendung werden, aber wenn Sie sehr spezifische Leistungsanforderungen zu tun haben, können Sie immer auch Ihre ganze Zahl im JWT als string:

{ scope: "7" } 

Auf diese Weise kann‘ Sie ist OAuth2-kompatibel und kann mit einem einfachen Parsing-Vorgang in einen Wert konvertiert werden, der für Ihre bitweisen Vergleiche geeignet ist.

+0

Ich habe keine Probleme mit Integer als Zeichenfolge, wenn es konform macht. Übrigens verwende ich Auth0 für eines meiner Projekte, aber es kann nicht verwendet werden, wenn Sie die Installation Ihrer Web-App vor Ort anbieten –

Verwandte Themen