Ich habe zwei Ansprüche (auch andere, aber das liegt nicht im Rahmen des Problems) für die Web-App, die ich erstelle: (Benutzer-)Name und Rolle.
Der Name wird verwendet, um den Benutzer mit @context.User.Identity?.Name zu identifizieren, um seinen Benutzernamen anzuzeigen.
Die Rolle besteht darin, zwischen Benutzern und Seitenadministratoren zu unterscheiden. Hauptsächlich, um eine Seite mit dem @attribute [Authorize(Roles=nameof(UserRoles.admin))], aber auch einem -Tag nur für Administratoren nutzbar zu machen.
Es gibt zwei (Haupt-)NuGet-Pakete, die bei der Erstellung der JWTs helfen können:
Code: Select all
Microsoft.IdentityModels.Tokens- (dies ist als Legacy markiert und sollte durch das oben genannte ersetzt werden)
Code: Select all
System.IdentityModel.Tokens.Jwt
creating jwt with Microsoft.IdentityModels.Tokens
Das Problem bei dieser Erstellungsmethode ist, dass der Name-Anspruch nicht „gespeichert“ wird. context.Benutzeridentität? Infolgedessen wird der Name nicht in meiner Blazor-App angezeigt (sollte in der oberen rechten Ecke sein --> Hallo !.
Rollenbasierter Zugriff ist möglich, Name wird nicht angezeigt
Ich habe viel herumgespielt und konnte im Internet keine zufriedenstellende Antwort finden, also habe ich versucht, das JWT mit dem Legacy-Tool zu erstellen. Dies ist der Code, der das JWT erstellt:
JWT erstellen mit System.IdentityModel.Tokens.Jwt
Der folgende Kontext wird erstellt:
Screenshot des Kontexts im Debugger mit System.IdentityModel.Tokens.Jwt
Jetzt erhalte ich zwar den Benutzernamen, aber der Role-Anspruch fehlt, obwohl ein RoleClaimType festgelegt ist:
Code der autorisierten Ansicht
Name wird angezeigt, aber rollenbasierter Zugriff ist nicht möglich.
Ich möchte, dass die Lösung den Namen sehen kann und rollenbasierten Zugriff in meiner App hat. Ehrlich gesagt habe ich keine Ahnung, wie ich das verstehen soll, da es für mich keinen Sinn ergibt.
Vielen Dank im Voraus!
Mobile version