Разработка MacOS в ASP. NET Core 3.1 на Rider: Windows Аутентификация - PullRequest
1 голос
/ 10 марта 2020

Я недавно переключился с компьютера 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, но это также не удалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...