Роли, назначенные пользователям, остаются нераспознанными

#asp.net-core #asp.net-identity #blazor #roles #asp.net-roles

#asp.сетевое ядро #asp.net-идентификация #блейзор #роли #asp.net-роли

Вопрос:

Я пытаюсь ввести учетную запись администратора в свой проект. Я обновил файл Startup.cs для использования ролей, добавил администратора и стандартную учетную запись внутри AspNetRoles и назначил пользователя, используя его идентификатор пользователя, администратором. Соответствующая [Авторизация(Роль = «Администратор»)] также была добавлена на страницу, но учетной записи администратора по-прежнему отказано в доступе. Я, кажется, не могу понять, что является причиной того, что это не распознается, я искал похожие сообщения, в которых предлагалось реализовать

 .AddRoleManagerlt;RoleManagerlt;IdentityRolegt;gt;()  

Однако и это, похоже, не помогло. Был бы признателен за любое понимание в решении этой проблемы. Используя Blazor wasm. Заранее спасибо.

Startup.cs

запуск общедоступного класса { запуск общедоступного класса(конфигурация конфигурации значков) { Конфигурация = конфигурация; }

 public IConfiguration Configuration { get; }   // This method gets called by the runtime. Use this method to add services to the container.  // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940  public void ConfigureServices(IServiceCollection services)  {  services.AddDbContextlt;ApplicationDbContextgt;(options =gt;  options.UseSqlServer(  Configuration.GetConnectionString("DefaultConnection")));   services.AddDatabaseDeveloperPageExceptionFilter();   services.AddDefaultIdentitylt;ApplicationUsergt;(options =gt; options.SignIn.RequireConfirmedAccount = false)  .AddRoleslt;IdentityRolegt;()  .AddEntityFrameworkStoreslt;ApplicationDbContextgt;();    services.AddIdentityServer()  .AddApiAuthorizationlt;ApplicationUser, ApplicationDbContextgt;();   services.AddAuthentication()  .AddIdentityServerJwt();   services.AddControllersWithViews();   services.AddRazorPages();   services.Configurelt;IdentityOptionsgt;(options =gt;  options.ClaimsIdentity.UserIdClaimType = ClaimTypes.NameIdentifier);   services.AddControllers().AddNewtonsoftJson(x =gt; x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize);  }   // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  {  if (env.IsDevelopment())  {  app.UseDeveloperExceptionPage();  app.UseMigrationsEndPoint();  app.UseWebAssemblyDebugging();  }  else  {  app.UseExceptionHandler("/Error");  // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.  app.UseHsts();  }   app.UseHttpsRedirection();  app.UseBlazorFrameworkFiles();  app.UseStaticFiles();   app.UseRouting();   app.UseIdentityServer();  app.UseAuthentication();  app.UseAuthorization();   app.UseEndpoints(endpoints =gt;  {  endpoints.MapRazorPages();  endpoints.MapControllers();  endpoints.MapFallbackToFile("index.html");  });  } }  

Программа.cs

 public class Program {  public static void Main(string[] args)  {  CreateHostBuilder(args).Build().Run();  }   public static IHostBuilder CreateHostBuilder(string[] args) =gt;  Host.CreateDefaultBuilder(args)  .ConfigureWebHostDefaults(webBuilder =gt;  {  webBuilder.UseStartuplt;Startupgt;();  }); }  

Таблица AspNetRoles

введите описание изображения здесь

Таблица AspNetUserRoles

введите описание изображения здесь

Бритвенные страницы

 @attribute [Authorize(Roles ="Admin")]  

Несмотря на описанные выше реализации, при входе в назначенную учетную запись администратора отображается сообщение

 You are not authorized to access this resource.  

Комментарии:

1. Не могли бы вы, пожалуйста, отобразить полный код в классе запуска вашего сервера и в классе программы вашего клиента. Вы можете удалить его позже… Вы используете приложение для веб-сборки Blazor, размещенное правильно ? ( Клиент, Сервер, Общий доступ)

2. Конечно! Я обновил большинство, чтобы включить его, и да, веб-сборка Blazor размещена

Ответ №1:

Попробуйте сделать следующее…

Изменить:

 services.AddIdentityServer()  .AddApiAuthorizationlt;ApplicationUser, ApplicationDbContextgt;();  

Для:

 // Configure identity server to put the role claim into the id token  // and the access token and prevent the default mapping for roles in  // the JwtSecurityTokenHandler.   services.AddIdentityServer()  .AddApiAuthorizationlt;ApplicationUser, ApplicationDbContextgt;(options =gt; {  options.IdentityResources["openid"].UserClaims.Add("role");  options.ApiResources.Single().UserClaims.Add("role");  });  // Need to do this as it maps "role" to ClaimTypes.Role and causes issues  JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("role");  

Комментарии:

1. Это сработало! Большое вам спасибо. Я занимался этим несколько часов! Спасибо