Обработчик авторизации с анонимной аутентификацией и аутентификацией Windows, включенной в IIS - PullRequest
0 голосов
/ 02 апреля 2019

В настоящее время у меня есть приложение Angular, которое подключается к моему веб-API asp.net core 2.1. Я хотел бы настроить свои собственные политики. Я включил Anonymous (чтобы Angular мог использовать глагол Options) и Windows Authentication. Однако, когда пользователь использует API, поле isAuthenticated имеет значение null (я полагаю, потому что оно сначала инициирует ответ на запрос), и поэтому я не получаю имя пользователя и isauthenticated имеет значение false. Итак, мой вопрос заключается в том, как мне принять во внимание, что это может быть анонимный раздел, и я должен дождаться завершения запроса / ответа, который вернет имя пользователя и роли, чтобы фактически запустить мою логику в обработчике.

Я отключил анонимную аутентификацию в IIS, и все работает нормально, но мне действительно нужно, чтобы Anonymous и Windows были включены.

Код обработчика авторизации:

public class BasicAuthorizationHandler : AuthorizationHandler<BasicAuthorizationFilter>
{

    List<string> model = new List<string>();
    ILogger _logger;

    public BasicAuthorizationHandler(ILogger<BasicAuthorizationHandler> logger)
    {
        _logger = logger;
    }
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, BasicAuthorizationFilter requirement)
    {
        var result = context.User.Identities;
        var id = result.FirstOrDefault() as ClaimsIdentity;
        _logger.LogInformation($"{id.Name}, IsAuthenticated {id.IsAuthenticated.ToString()}");
        context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

Настройка метода при запуске:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

        }


        app.UseAuthentication();
        app.UseMvc();
        app.UseCors();
        app.UseDefaultFiles();
        app.UseStaticFiles();


        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Ctrac API");
        });
    }
...