Asp.Net 核心:IAuthorizationFilter and Authentication Service的执



我正在 Asp.Net 核心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 中的伟大答案)

我需要确定我的访问控制过滤器将在 JWT 身份验证服务之后运行,以便 上下文。HttpContext.User 已经填充。

(我猜顺序是正确的,过滤器将在服务后运行,但我找不到正确的文档。

来自 ASP.NET 核心安全概述(强调我的):

身份验证与授权

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

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

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

最新更新