Использовать несколько схем аутентификации с атрибутом AuthorizationFilter в ASP.NET CORE - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть несколько схем аутентификации, чтобы избежать токена, предоставленного моим Identity Server и Azure Active Directory

public void ConfigureServices(IServiceCollection services)
{
    //...

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "https://localhost:5000/";
            options.Audience = "api1";
            options.Events = new JwtBearerEvents
            {
                OnTokenValidated = async context =>
                {
                    TokenValidated(context);
                },
                OnAuthenticationFailed = context =>
                {
                    context.Fail("error");
                    return Task.CompletedTask;
                }
            };
        })
        .AddJwtBearer(AzureADDefaults.BearerAuthenticationScheme, options =>
        {
            options.Audience = myAudience;
            options.Authority = "https://login.microsoftonline.com/" + TenantId;
            options.Events = new JwtBearerEvents
            {
                OnTokenValidated = async context =>
                {
                    TokenValidated(context);
                },
                OnAuthenticationFailed = context =>
                {
                    context.Fail("error");
                    return Task.CompletedTask;
                }
            };
        });
}

У меня есть атрибут для авторизации контроллеров API:

public void OnAuthorization(AuthorizationFilterContext context)
{
    if (context.Filters.Any(item => item is IAllowAnonymousFilter))
    {
        return;
    }
    if (!isAuthorized(context))
    {
        //...
    }
}

Мои проблемы - это своего рода казнь.Если я отправляю запрос с токеном, предоставленным ADD, сначала запрос поступает к первому каналу-носителю и переходит к OnAuthenticationFailed, потому что он не предоставляется IS.Затем для выполнения перейдите к OnAuthorization (), а затем вернитесь ко второму AddJwtBearer и введите OnTokenValidated ().

Мне нужно разрешить второй сценарий аутентификации перед выполнением OnAuthorize атрибута.

Как я могу это сделать?

...