Ролевая авторизация в .Net 8 с использованием ADC#

Место общения программистов C#
Anonymous
Ролевая авторизация в .Net 8 с использованием AD

Сообщение Anonymous »

Я разрабатываю веб-приложение с использованием Blazor — серверная часть, которое каждый раз, когда они открывают веб-приложение, запускает авторизацию, независимо от того, есть у человека AD или нет.
Если я запущу программа использует IIS Express, работает нормально и проблем нет. Но если я добавлю его на тестовый сервер, он получит сообщение об ошибке:

Ошибка: в текущем канале произошло необработанное исключение, поэтому этот канал будет быть прекращено. Для получения более подробной информации включите подробные исключения, установив «DetailedErrors: true» в «appSettings.Development.json» или задав «CircuitOptions.DetailedErrors».

I используйте этот код для получения AD пользователя:

Код: Выделить всё

public class CustomAuthStateProvider : AuthenticationStateProvider
{
private readonly IAppUserRepository _appUserRepository;
public CustomAuthStateProvider(IAppUserRepository appUserRepository)
{
_appUserRepository = appUserRepository;
}
public override async Task GetAuthenticationStateAsync()
{
var userName = GetCurrentUserName();
var fullName = await GetFullName();
var role = await GetCurrentUserRoleAsync();
if (userName is not null)
{
var claims = new[]
{
new Claim(ClaimTypes.Name, userName),
new Claim(ClaimTypes.NameIdentifier, fullName),
new Claim(ClaimTypes.Role, role),
};

var identity = new ClaimsIdentity(claims, "Windows Authentication");
var user = new ClaimsPrincipal(identity);

return new AuthenticationState(user);
}
else
{
return new AuthenticationState(new ClaimsPrincipal());
}
}

public string GetCurrentUserName()
{
var loggedUser = WindowsIdentity.GetCurrent();

string? userName = loggedUser.Name;

userName = userName?.Replace("\\", "/");

int slash = userName.LastIndexOf('/');

return slash >= 0 ? userName.Substring(slash + 1) : userName;
}

public async Task GetFullName()
{
var userName = GetCurrentUserName();
var adUser = await _appUserRepository.GetUserFullname(userName);
if (string.IsNullOrEmpty(adUser))
{
return $"not registered({adUser})";
}
return adUser;
}

public async Task GetCurrentUserRoleAsync()
{
var userName = GetCurrentUserName();
var role = await _appUserRepository.GetUserRoleAsync(userName);
return role;
}
Несмотря на то, что имя пользователя, полное имя и роль не пусты/нулевые, возникают ошибки.
Есть ли у кого-нибудь идеи? в чем проблема?

Подробнее здесь: https://stackoverflow.com/questions/784 ... 8-using-ad

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