Я аутентифицирую пользователей с помощью Windows Authenticate от Blazor. Теперь я хочу авторизовать и этих пользователей. Я делаю это, прокручивая список пользователей и идентификатор пользователя в таблице базы данных, которая выглядит следующим образом:
Идентификатор пользователя
Идентификатор роли
3
1
7
1
112
1
4
2
72
8
2
Фактическая авторизация происходит в CustomAuthenticationStateRrovider.cs
Код: Выделить всё
using Microsoft.AspNetCore.Components.Authorization;
using System.Diagnostics;
using System.Security.Claims;
namespace Authtest.Services
{
public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
private List userRoles = default!;
public override async Task GetAuthenticationStateAsync()
{
var userroleService = new UserRoleService();
userRoles = userroleService.GetUserRolesListe();
var identity = new ClaimsIdentity();
foreach (var role in userRoles)
{
Debug.WriteLine($"Adding role {role.RoleId} to identity.");
identity.AddClaim(new Claim(ClaimTypes.Role, role.RoleId.ToString()));
}
var user = new ClaimsPrincipal(identity);
return new AuthenticationState(user);
}
}
}
У меня сейчас возникла следующая проблема, и она находится в индексе. razor, как видно на втором снимке экрана, проблема с аутентификацией, отображается авторизованная часть, хотя у моего пользователя есть роль 1, и только пользователи с ролью 2 должны видеть текст. Другая проблема (которая, я думаю, зависит от того же решения) с LoginDisplay.razor заключается в том, почему всегда отображается часть NotAuthorized.
PS: Я думаю, проблема в том, что при создании нового ClaimsPrincipal Я отменяю аутентификацию Windows.
Я создал совершенно новое серверное приложение syncfusion blazor и поместил в новое только часть аутентификации из моего проекта, чтобы я мог попробовать все, но ничего. сработало.
Изменить: я даже сделал здесь более подробный снимок экрана с пользовательской переменной.
Подробнее здесь: https://stackoverflow.com/questions/769 ... -in-blazor
Мобильная версия