在IIS中启用了匿名和Windows身份验证的授权处理程序

时间:2019-04-02 14:36:36

标签: asp.net-core-webapi-2.1

当前,我有一个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");
        });
    }

0 个答案:

没有答案