Я недавно переключился с компьютера Windows с Visual Studio на MacBook с Rider. У меня есть проект. NET Core 3.1, который я обновил. NET Framework 4.7.2, и я пытаюсь настроить для него аутентификацию Windows.
Мой MacBook подключен к домену компании через Enterprise Connect, и у меня есть активные билеты Kerboros. AKA, я могу получить доступ к ресурсам компании, которые используют аутентификацию Windows или иным образом получить мои учетные данные домена. Например, я могу войти в опубликованную версию моего проекта, которая работает на IIS и. NET Framework 4.7.2.
Однако я не могу использовать Windows Аутентификацию при локальном запуске версии. NET Core 3.1. Я внес следующие изменения в свой проект:
В StartUp.cs
добавил следующее к ConfigureServices
:
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
services.AddAuthorization(options =>
{
options.AddPolicy(nameof(Policy.AuthorizedUser),
policy => policy.Requirements.Add(new AuthorizedUserRequirement()));
});
services.AddSingleton<IAuthorizationHandler, AuthorizedUserHandler>();
В StartUp.cs
, добавил следующее к Configure
:
app.UseAuthentication();
app.UseAuthorization();
Я установил пакет Microsoft.AspNetCore.Authenticate.Negotiate
.
Создан обработчик авторизации и требование:
public class AuthorizedUserHandler: AuthorizationHandler<AuthorizedUserRequirement>
{
private readonly AuthorizationConfiguration _configuration;
public AuthorizedUserHandler(AuthorizationConfiguration configuration)
{
_configuration = configuration;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AuthorizedUserRequirement requirement)
{
if (context.User.IsInRole(_configuration.User.Group))
{
// Call 'Succeed' to mark current requirement as passed
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
public class AuthorizedUserRequirement: IAuthorizationRequirement { }
Затем я применяю его к мой контроллер для ограничения доступа:
[Authorize(Policy = nameof(Policy.AuthorizedUser))]
public class CustomerController : Controller
{
}
Мой объект конфигурации введен правильно. Однако context.User
пусто. Когда я отлаживаю свой проект и go на странице, которая использует эту политику (в Google Chrome), я получаю страницу ошибки HTTP ERROR 401 по умолчанию от Google Chrome.
Как я могу изменить свой код, чтобы исправить эту ошибку, или иным образом настроить Windows Аутентификация для локальной отладки на MacOS? Я также попытался использовать схему аутентификации Windows в services.AddAuthentication
, но это также не удалось.