我正在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已经填充。
(我猜订单是正确的,过滤器将在服务后运行,但我找不到合适的文档。)
答案 0 :(得分:0)
来自ASP.NET Core Security Overview(强调我的):
身份验证与授权
身份验证是用户提供凭据然后与存储在操作系统,数据库,应用程序或资源中的凭据进行比较的过程。如果它们匹配,则用户成功进行身份验证,然后可以在授权过程中执行他们授权的操作。授权是指确定允许用户执行操作的过程。
另一种考虑身份验证的方法是将其视为输入空间的方式,例如服务器,数据库,应用或资源,而授权是用户可以执行的操作执行该空间内的哪些对象(服务器,数据库或应用程序)。
所以回答你的问题:身份验证始终在之前授权管道。这是有道理的,因为你需要知道用户是谁,然后才知道他有权做什么。