Авторизация Blazor на основе ролей при загрузке страницы - PullRequest
0 голосов
/ 10 июля 2020

Надеюсь, вы, ребята, можете мне помочь, я не могу заставить авторизацию на основе ролей работать при загрузке первой страницы в моем приложении.

Я пишу приложение Blazor на стороне сервера с настраиваемым обработчиком авторизации, в котором я добавить утверждения ролей в объект User Identity, и это работает нормально.

На моей странице бритвы я установил атрибут [Authorize], который показывает страницу, если пользователь аутентифицирован, что ожидается.

Но если я добавляю роль к атрибуту, например [Authorize (Roles = "User")], он не работает на странице refre sh, щелкнув другой пункт меню в приложении, кажется, что роли применяются правильно, и тогда он работает.

В файле App.razor я поставил точку останова и проверил context.User.Identity, чтобы выяснить, что утверждения еще не были добавлены.

<NotAuthorized>
  @if (context.User.Identity.IsAuthenticated)
    {
      <p>You do not have sufficient rights to view this page...</p>
    }
    else
    {
      <NotLoggedIn></NotLoggedIn>
    }
 </NotAuthorized>

Мой пользовательский обработчик авторизации после этого добавляются только утверждения ролей.

Я изменил порядок конвейера запросов в файле startup.cs вокруг, это выглядит так

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapBlazorHub();
                endpoints.MapFallbackToPage("/_Host");
            });
        }
* 1 016 * Код в ConfigureServices следующий:
services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata = false;
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = signingKey,
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });

            services.AddAuthorization(options =>
            {
                var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme, "Bearer");
                defaultAuthorizationPolicyBuilder = defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
                defaultAuthorizationPolicyBuilder.AddRequirements(new AppSettingsAuthRequirement(Configuration));
                options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
            });

Спасибо за ваше время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...