Я пытаюсь заставить ядро 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.