Asp.net core .NET核心API中的自定义授权筛选器

Asp.net core .NET核心API中的自定义授权筛选器,asp.net-core,.net-core,authorization,asp.net-authorization,core-api,Asp.net Core,.net Core,Authorization,Asp.net Authorization,Core Api,我想在使用我的核心api访问任何数据之前授权用户,所以我尝试使用JWT身份验证。 我已经在使用api登录用户时成功生成了令牌,并在会话中将该令牌保存在客户端。现在,每当用户希望使用api访问任何数据时,我都会将该令牌发送到api头中,并希望使用自定义授权过滤器验证该JWT令牌。我已经创建了自定义授权过滤器,并将其应用到我的GetMenu api上,我能够成功地验证该令牌,但在授权过滤器中进行令牌验证后,它不会在我的GetMenu api上命中它 这是我的AccountController代码:

我想在使用我的核心api访问任何数据之前授权用户,所以我尝试使用JWT身份验证。 我已经在使用api登录用户时成功生成了令牌,并在会话中将该令牌保存在客户端。现在,每当用户希望使用api访问任何数据时,我都会将该令牌发送到api头中,并希望使用自定义授权过滤器验证该JWT令牌。我已经创建了自定义授权过滤器,并将其应用到我的GetMenu api上,我能够成功地验证该令牌,但在授权过滤器中进行令牌验证后,它不会在我的GetMenu api上命中它

这是我的AccountController代码:

[Filters.Authorization]
[AllowAnonymous]
[HttpPost]
[Route("GetMenu")]
public IActionResult GetMenu(string clientid, int rolecode, string repcode)
{
    //further process
}
这是我的过滤器。授权代码:

public class Authorization: AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        if (!ValidateToken(filterContext.HttpContext.Request.Headers["token"]))
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}
我在OnAuthorization方法和GetMenu api上有断点。 我正在通过postman调用我的GetMenu api进行测试,它正在过滤器中的OnAuthorization方法上成功命中它。授权和验证我的JWT令牌,并在postman中显示状态代码:200,但在令牌验证成功后,它应该命中GetMenu api进行进一步的数据处理,但没有命中。
问题是什么?我错过了什么?请帮忙

如果请求成功授权,则不应设置
过滤器Context.Result

//
// Summary:
//     A context for authorization filters i.e. Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter
//     and Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter implementations.
public class AuthorizationFilterContext : FilterContext
{
    //
    // Summary:
    //     Gets or sets the result of the request. Setting Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result
    //     to a non-null value inside an authorization filter will short-circuit the remainder
    //     of the filter pipeline.
    public virtual IActionResult Result { get; set; }
}
您只需在失败时设置
结果

public class Authorization: AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        if (!ValidateToken(filterContext.HttpContext.Request.Headers["token"]))
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}

我想这是因为你显式地设置了一个OkResult,这就结束了处理,因为它现在返回了那个结果。我应该在那里写什么?你有没有试着让它失败?如果它未经验证,您希望它返回未经授权的,但如果它没有问题,您希望它继续运行。我想继续将其发送到我的api以进一步访问数据,但验证后它不会进入api是的,您告诉它不要这样做。尝试注释返回结果。实际上,您正在返回一个actionresult。你在处理负面结果,这才是最重要的。如果验证失败,您希望以未经授权的结果终止,您正在执行此操作。我现在尝试了您的解决方案,即使在筛选器成功验证我的令牌后,它仍会给我状态代码401 unauthorized,现在会出现什么问题?我尝试设置[AllowAnonymous]在我的GetMenu控制器上,在验证auth筛选器中的令牌后,它现在正在点击GetMenu,但这是正确的方法吗?@shryaspednekar检查
ValidateToken(filterContext.HttpContext.Request.Headers[“token”])
是否返回true。是的,它确实返回truetrue@ShreyasPednekar删除
[AllowAnonymous]
[Filters.Authorization]
,是否会命中该方法?