是否可以在asp.net核心应用程序2.1的同一应用程序中使用Cookie和令牌基础身份验证?

时间:2018-08-31 07:03:22

标签: authentication asp.net-core

在一种情况下,我需要在一个Web应用程序中使用两种类型的auth: 对于应用程序的MVC部分-Cookie基础身份验证,对于Angular部分JWT令牌基础身份验证。 我想对注解使用配置方法。

在setup.cs中,我要配置:URL路径中具有/ api / *的所有controlles方法使用JWT令牌基础身份验证,而没有/ api / *的所有controlles方法使用Cookie。

/ p>

要实现此目的,我将两个策略与自定义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。*后,它将停止工作...

有人问这个问题吗?

0 个答案:

没有答案