Rollenbasierte Autorisierung mit IdentityServer4

8

Ich versuche, "Role Based Authorization" mithilfe von IdentityServer4 zu implementieren, um den Zugriff auf meine API basierend auf den Benutzerrollen zu ermöglichen.

Ich möchte zum Beispiel zwei Rollen für den Benutzer haben, also FreeUser und PaidUser, und möchte mit dem Autorize-Attribut über [Authorize (Roles="FreeUser"))] auf die API zugreifen. Bitte helfen Sie mir, wie Ich erreiche das.

Ich habe die folgende Lösungsstruktur:

  1. IdentityServer
  2. WebApi
  3. Javascript-Client

Ich habe meinen Javascript-Client wie folgt registriert:

%Vor%

Bereiche

%Vor%

Benutzer

%Vor%

WebApi Startup.cs

%Vor%

Web-API-Controller

%Vor%

Javascript-Client app.js Hier versuche ich den Benutzer über IdentityServer anzumelden und eine API-Anfrage zu machen.

%Vor%

Der Login-Ablauf funktioniert einwandfrei und ich kann mich erfolgreich anmelden, und ich kann die Rolle im Zugriffstoken erhalten.

Wenn ich eine Anfrage an die API mache, indem ich auf die Schaltfläche (Call Api) klicke, bekomme ich den folgenden Fehler ..

    
muhammad waqas 28.11.2016, 12:25
quelle

3 Antworten

5

Da Sie kein Konfigurationsobjekt für JavaScript-Clients angegeben haben, gehe ich davon aus, dass Sie den Bereich wie folgt konfiguriert haben.

%Vor%

Ich glaube, dass der Hauptgrund für Ihr Problem darin besteht, dass der Rollenanspruch nicht in Ihrem Zugriffstoken enthalten ist.

Fügen Sie dem api1-Bereich den Rollenanspruch wie folgt hinzu, um ihn in das Zugriffstoken einzubeziehen.

%Vor%

Sie können meine Antwort hier lesen, um das Problem zu beheben. Implementierung von Rollen in Identity Server 4 mit ASP .net Identität

Die komplette Arbeitslösung ist da. Ссылка

    
rawel 30.11.2016, 00:27
quelle
2

Ändern Sie new Claim("role","FreeUser") in new Claim(ClaimTypes.Role, "FreeUser")

Oder erstellen Sie eine Richtlinie wie folgt:

%Vor%

und benutze es:

%Vor%     
adem caglin 28.11.2016 13:01
quelle
0

Ich habe ein Beispiel für diesen Beitrag geschrieben

Identity Server 4: Hinzufügen von Ansprüchen zum Zugriffstoken

Ich habe mit Rollen und Behauptungen getestet, dass ich [Autorisieren (Role="SuperAdmin, Admin")] sowohl in der Client-Web-App als auch in der API-App verwenden kann.

    
Mirak 12.04.2017 12:35
quelle