Asp.Net Core Anonymous и Windows Authentication не работают вместе - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь заставить ядро ​​Asp.net Web API 2.1 работать с IIS, когда включена аутентификация Windows и Anonymous. API работает отлично, когда я отключаю анонимный доступ, но не когда они оба установлены.

  • Я использовал атрибут authorize и установил его на уровне класса на всех моих контроллерах.
  • Я установил службы. AddAuthentication (Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme);
  • Я включил Windows и Anonymous на IIS.

            _logger.LogInformation("Entered into windows Authentication");
            services.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme);
            services.AddMvcCore(opts =>
            {
            }).SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1)
            .AddFormatterMappings()
            .AddDataAnnotations() // Optional if no validation using attributes
            .AddCors()            // 
            .AddApiExplorer()     // Not Optional
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.Converters.Add(new StringEnumConverter());
            })
            .AddJsonFormatters(o =>
            {
                o.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                o.Formatting = Newtonsoft.Json.Formatting.Indented;
            });
    

В моем файле startup.cs метод Configure выглядит следующим образом:

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

        }
        app.UseMvc();
        app.UseCors();
        app.UseAuthentication();

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

и на моих контроллерах:

    [HttpGet, AutoQueryable]
    [Authorize]
    public IQueryable<DocumentViewModel> Get([FromServices] IQueryableRepository repository, [FromServices] IHttpContextAccessor context)
    {

       _logger.LogInformation($"This is httpContext userid: {context?.HttpContext?.User?.Identity?.Name}"); //This is null
        return repository.GetIQueryable<DocumentView>().Where(x => x.ActiveFlag == "Y"
        && _userRepo.User.DocTypes.Contains(x.DocumentTypeCode))
        .OrderBy(a => a.DocTypeCategory).ThenBy(a => a.SubCategory).ThenByDescending(a => a.Id).UseAsDataSource(_mapper).For<DocumentViewModel>();

    }

context? .HttpContext? .User? .Identity? .Name Я ожидаю, что это что-то даст, потому что в методе есть Authorize Annotation.

...