Сервер Blazor, атрибут авторизации с AuthenticationStateProvider не работаетC#

Место общения программистов C#
Anonymous
Сервер Blazor, атрибут авторизации с AuthenticationStateProvider не работает

Сообщение Anonymous »

Попытка реализовать аутентификацию и авторизацию с помощью AuthenticationStateProvider. После долгих экспериментов большая часть этого работает. У меня возникла пара проблем:
  • Если я обновлю страницу, авторизация полностью потеряется, и мне придется войти заново.
  • Механизм атрибутов, похоже, не работает, например после входа в систему и перехода на страницу с этим атрибутом меня отправляет обратно на страницу входа. :
    @attribute [Authorize(Roles = "SuperAdmin")]
Не уверен, доступен ли атрибут при использовании AuthenticationStateProvider, я не видел примеров их совместного использования. Еще один момент: мне нужно использовать интерактивный режим для некоторых страниц из-за использования Blazorise.
Код выглядит следующим образом:
Program.cs
using Blazored.Toast;
using Blazorise;
using Blazorise.Bootstrap5;
using Blazorise.Icons.FontAwesome;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components.Authorization;

// This is a Blazor Server Application (NOT a Webassembly App)
var builder = WebApplication.CreateBuilder(args);

// Add service defaults & Aspire components.
builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddAuthorization();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).
AddCookie(options =>
{
options.Cookie.Name = "auth_cookie";
options.LoginPath = "/";
options.LogoutPath = "/logout";
options.Cookie.MaxAge = TimeSpan.FromMinutes(90);
options.AccessDeniedPath = "/accessdenied";
});
builder.Services.ConfigureApplicationCookie(ops =>
{
ops.ExpireTimeSpan = TimeSpan.FromMinutes(30);
ops.SlidingExpiration = true;
}); builder.Services.AddCascadingAuthenticationState();
builder.Services.AddRazorComponents().AddInteractiveServerComponents();
builder.Services.AddScoped();
builder.Services.AddOutputCache();
builder.Services.AddSingleton();
builder.Services.AddBlazoredToast();
builder.Services
.AddBlazorise(options =>
{
options.Immediate = true;
})
.AddBootstrap5Providers()
.AddFontAwesomeIcons();
builder.Services.ConfigureApplicationCookie(ops =>
{
ops.ExpireTimeSpan = TimeSpan.FromMinutes(30);
ops.SlidingExpiration = true;
});
var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// 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.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents().AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();

Login.razor
@code {

async void Authenticate()
{
var result = await LoginApi.Login(login);

((CustomAuthStateProvider)AuthenticationStateProvider)
.AuthenticateUser(user.UserName, user.Role);
navigationManager.NavigateTo("/home");
}
}

MyAttribute.razor
@attribute [Authorize(Roles = "SuperAdmin")]


Подробнее здесь: https://stackoverflow.com/questions/791 ... r-not-work

Вернуться в «C#»