Also habe ich derzeit IdentityServer 4 in einer .Net-Core-Anwendung mit JWT Bearer Token für die Authentifizierung implementiert.Asp.Net Core Identity mit AuthorizeAttribute funktioniert nicht für Rollen
Das Problem scheint zu sein, wenn [Authorize(Roles = "Admin")]
mit erhalte ich die folgende aus den Protokollen: [Information] AuthenticationScheme: "Bearer" was forbidden.
Wenn ich nur die [Authorize]
Attribut es funktioniert gut. Hier
ist der Code:
services.AddDbContext<OmbiContext>(options =>
options.UseSqlite("Data Source=Ombi.db"));
services.AddIdentity<OmbiUser, IdentityRole>()
.AddEntityFrameworkStores<OmbiContext>()
.AddDefaultTokenProviders();
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(IdentityConfig.GetIdentityResources())
.AddInMemoryApiResources(IdentityConfig.GetApiResources())
.AddInMemoryClients(IdentityConfig.GetClients())
.AddAspNetIdentity<OmbiUser>();
services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = false;
options.Password.RequiredLength = 1;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
});
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IMemoryCache cache)
{
app.UseIdentity();
app.UseIdentityServer();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = options.Value.WebsiteUrl,
ApiName = "api",
ApiSecret = "secret",
EnableCaching = true,
CacheDuration = TimeSpan.FromMinutes(10), // that's the default
RequireHttpsMetadata = options.Value.UseHttps, // FOR DEV set to false
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
// etc...
}
-Code den Benutzer und die Rolle zu erstellen:
var result = await UserManager.CreateAsync(userToCreate, user.Password);
if (result.Succeeded)
{
if (!(await RoleManager.RoleExistsAsync("Admin")))
{
var r = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}
var re = await UserManager.AddToRoleAsync(userToCreate, "Admin");
}
der Suche in der Datenbank alles richtig verbunden und ich kann sehen, dass, dass Benutzer das hat korrekte Rolle, aber das Autorize-Attribut funktioniert immer noch nicht.
EDIT
Nach etwas mehr Untersuchung, an der User
Eigenschaft auf dem Controller suchen, wenn wir die [Authorize]
haben hier Attribut ist das Ergebnis:
So scheint es, dass wir nicht einmal tun Holen Sie sich den Benutzernamen oder etwas über den Benutzer.
wissen Auch es funktioniert, wenn 'mit [Genehmigtes]' nur nicht, wenn ich liefern eine Rolle? –
Betrachtet man den Code in 'UseIdentityServerAuthentication', ruft er' UseJwtBearerAuthentication' auf –