В настоящее время у меня есть приложение 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");
});
}