当前,我有一个Angular应用程序,该应用程序连接到我的asp.net core 2.1 Web API。我想设置自己的自定义策略。我同时启用了匿名(允许Angular使用Options动词)和Windows身份验证。但是,当用户使用API时,isAuthenticated字段为null(我猜是因为它首先启动质询响应),所以我没有获得用户名,并且isauthenticated为false。因此,我的问题是我该如何考虑这可能是匿名部分,而我应该等待质询/响应完成,这将返回用户名和角色以在处理程序中实际运行我的逻辑。
我已经在IIS中禁用了匿名身份验证,并且一切正常,但是我确实需要同时启用匿名和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");
});
}