在一种情况下,我需要在一个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。*后,它将停止工作...
有人问这个问题吗?