Asp.Net Core:IAuthorizationFilter 和 Authentication Service 的执行顺序
Posted
技术标签:
【中文标题】Asp.Net Core:IAuthorizationFilter 和 Authentication Service 的执行顺序【英文标题】:Asp.Net Core: order of execution of IAuthorizationFilter and Authentication Service 【发布时间】:2018-08-13 00:43:16 【问题描述】:我正在 Asp.Net Core Web Api 应用程序中实现身份验证和授权机制。
我使用 JWT 进行用户身份验证:
ConfigureServices(IServiceCollection services)
...
services.AddAuthentication(...).AddJwtBearer(...)
...
(类似于https://***.com/a/45901894/1544054)
此服务还根据 JWT 数据填充 HttpContext.User。
对于授权,我使用自定义 RBAC 实现,基于
class AccessControlFilter : IAuthorizationFilter
public AccessControlFilter(string permission) ...
public void OnAuthorization (AuthorizationFilterContext context)...
(类似于https://***.com/a/41348219 中的最佳答案)
我需要确定我的 AccessControlFilter 将在 JWT 身份验证服务之后运行,以便 context.HttpContext.User 已填充。
(我猜顺序是正确的,过滤器会在服务后运行,但我找不到正确的文档。)
【问题讨论】:
【参考方案1】:来自ASP.NET Core Security Overview(强调我的):
身份验证与授权
身份验证是用户提供凭据的过程,然后将凭据与存储在操作系统、数据库、应用程序或资源中的凭据进行比较。如果它们匹配,则用户身份验证成功,然后可以在授权过程中执行他们被授权的操作。授权是指确定允许用户做什么的过程。
另一种理解身份验证的方式是将其视为进入空间的一种方式,例如服务器、数据库、应用程序或资源,而授权是用户可以执行的操作执行该空间内的哪些对象(服务器、数据库或应用程序)。
所以回答您的问题:身份验证总是发生在授权管道之前。这是有道理的,因为在知道用户有权做什么之前,您需要知道用户是谁。
【讨论】:
我找到了一篇更好的文章:过滤器在中间件之后运行(请参阅docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters)我会接受你的回答,因为你的文章让我找到了准确的答案。以上是关于Asp.Net Core:IAuthorizationFilter 和 Authentication Service 的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
Asp.NET Core进阶 第四篇 Asp.Net Core Blazor框架
.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介
深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的
.Net Core 学习 - ASP.NET Core 概念学习
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门