Надеюсь, вы, ребята, можете мне помочь, я не могу заставить авторизацию на основе ролей работать при загрузке первой страницы в моем приложении.
Я пишу приложение 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();
});
Спасибо за ваше время!