Можно ли использовать базовую аутентификацию Cookie и Token в одном приложении в основном приложении asp.net 2.1? - PullRequest
0 голосов
/ 31 августа 2018

У меня есть случай, когда мне нужно использовать 2 типа аутентификации в одном веб-приложении: для MVC части приложения - базовая аутентификация Cookie, а для угловой части - базовая аутентификация JWT Token. Я хотел бы использовать конфигурационный подход над аннотацией.

В файле setup.cs я хотел бы настроить: все методы-контроллеры, имеющие / api / * в URL-пути для использования базовой аутентификации токена JWT, и все методы-контроллеры, в которых нет / api / * для использования Cookie.

Для реализации этого я использую две политики в сочетании с пользовательским AuthorizeFilter:

var jwtPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                        .RequireAuthenticatedUser()
                        .Build();

var cookiePolicy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();

options.Filters.Add(new CustomAuthorizeFilter(jwtPolicy, applyOnPath: "/api"));
options.Filters.Add(new CustomAuthorizeFilter(cookiePolicy, notApplyOnPath: "/api"));

И вот реализация CustomAuthorizeFilter:

public class CustomAuthorizeFilter : AuthorizeFilter
{
    private string _applyOnPath;
    private string _notApplyOnPath;

    public CustomAuthorizeFilter(AuthorizationPolicy policy, string applyOnPath = null, string notApplyOnPath = null) : base(policy)
    {
        _applyOnPath = applyOnPath;
        _notApplyOnPath = notApplyOnPath;
    }

    public override Task OnAuthorizationAsync(Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext context)
    {
        if (_applyOnPath != null && context.HttpContext.Request.Path.StartsWithSegments(_applyOnPath) == true)
            return base.OnAuthorizationAsync(context);

        else if (_notApplyOnPath != null && context.HttpContext.Request.Path.StartsWithSegments(_notApplyOnPath) == false)
            return base.OnAuthorizationAsync(context);

        else //Otherwise apply this policy
            return Task.FromResult(0);
    }
}

В .netCore 2.0 все работало нормально, но после обновления до .netCore 2.1. * Перестало работать ...

У кого-нибудь есть идея, в чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...