Asp.Net Core:执行IAuthorizationFilter和Authentication Service的顺序

时间:2018-03-05 11:10:54

标签: asp.net-core asp.net-authorization

我正在Asp.Net Core Web Api应用程序中实现身份验证和授权机制。

我使用JWT进行用户身份验证:

ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(...).AddJwtBearer(...)
...
}

(类似于https://stackoverflow.com/a/45901894/1544054

此服务还根据JWT数据填充HttpContext.User。

对于授权,我使用基于

的自定义RBAC实现
class AccessControlFilter :  IAuthorizationFilter
{
    public AccessControlFilter(string permission) {...}
    public void OnAuthorization (AuthorizationFilterContext context){...}
}

(类似于https://stackoverflow.com/a/41348219中的好答案)

我需要确定我的AccessControlFilter将在JWT身份验证服务之后运行,以便 context.HttpContext.User已经填充。

(我猜订单是正确的,过滤器将在服务后运行,但我找不到合适的文档。)

1 个答案:

答案 0 :(得分:0)

来自ASP.NET Core Security Overview(强调我的):

  

身份验证与授权

     

身份验证是用户提供凭据然后与存储在操作系统,数据库,应用程序或资源中的凭据进行比较的过程。如果它们匹配,则用户成功进行身份验证,然后可以在授权过程中执行他们授权的操作。授权是指确定允许用户执行操作的过程。

     

另一种考虑身份验证的方法是将其视为输入空间的方式,例如服务器,数据库,应用或资源,而授权是用户可以执行的操作执行该空间内的哪些对象(服务器,数据库或应用程序)。

所以回答你的问题:身份验证始终在之前授权管道。这是有道理的,因为你需要知道用户是谁,然后才知道他有权做什么。