1

Ich spiele mit Identity Server v4 (aber ich denke, ist das gleiche mit v3) und .NET Core.IdentityServer, Ansprüche und Rollen

Gerade jetzt habe ich seltsame Frage, die ich nicht verstehe.

Von meiner MVC-Anwendung verwende ich die [Autorisieren (Rollen = "Geek")] zum Schutz meiner Controller/Aktionen. Mit Blick auf den aktuellen Benutzer aus dem HttpContext sind alle Rollen als Ansprüche und nicht als Rollen verfügbar (in der Tat User.IsInRole ("Geek") Rückgabe false).

Darüber hinaus kann ich die Ansprüche mit dem authorize Attribut nicht verwenden, da alle Rollen in der Forderungssammlung mit dem gleichen Schlüssel ("Rolle" natürlich) gespeichert werden.

Gibt es eine Möglichkeit, automatisch alle Ansprüche mit dem Schlüssel "Rolle" auch als Rolle für den aktuellen Prinzipal zu haben?

Ich habe versucht, mit "auf Token Validierungsereignis" aber ohne Erfolg zu spielen.

Ich versuche, die Probe Repo, so meinen Code ziemlich das gleiche dieses https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/MVC%20and%20API

Jeder Hinweis ist?

Antwort

1

Haben die Rollenansprüche einen "Type" -Eigenschaftswert von "role" oder ist es ein URI wie "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"? Wenn es sich um eine "Rolle" und nicht um einen URI handelt, legen Sie Ihre InboundClaimTypeMap möglicherweise auf ein leeres Wörterbuch fest, wie in der Dokumentation beschrieben (siehe Abschnitt "Anspruchsumwandlung" here). Wenn Sie die folgende Zeile in der Startcode haben versuchen zu entfernen es:

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>(); 

Der Standard InboundClaimTypeMap einige JWT behauptet in System.Security.Claims.ClaimTypes abbildet, die einen vollständigen URI verwenden. Eine davon ist die Rolle.

Die IsInRole-Methode von ClaimsIdentity verwendet eine Eigenschaft namens RoleClaimType, um den Zeichenfolgenwert zu ermitteln, der mit der Type-Eigenschaft eines Anspruchs übereinstimmen muss, um die Liste der verfügbaren Rollen zu finden. Der erforderliche Rollestext wird dann mit den Werten in der resultierenden Liste passender Ansprüche abgeglichen. Eine standardmäßige ClaimsIdentity verwendet System.Security.Claims.ClaimTypes.Role, um nach Rollenansprüchen in der Identität zu suchen.

Wenn Sie möchten, dass Ihre App weiterhin die JWT-Anspruchstypsyntax verwendet, müssen Sie in einem SecurityTokenValidated Notification-Ereignis eine neue ClaimsIdentity erstellen. Mit dem ClaimsIdentity-Konstruktor können Sie den Text angeben, der beim Abgleichen von Anspruchsrollen verwendet werden soll. In diesem Fall wäre der Text nur "Rolle".

Verwandte Themen