我有一个基于自定义基于策略的授权的.NET核心Web API(检查JWT上的声明和声明值的策略)。Web API授权失败时登录数据库[Net.Core]
即使授权失败(特别是失败时),每次用户调用Web API函数时,都需要记录(到数据库)。
为此,我重写了这些方法OnActionExecuting
和OnResultExecuted
(因为我想在一个过滤器上记录每个请求,而在另一个过滤器中记录请求的结果)。但是,如果授权失败,则两个过滤器都不会被触发。
这是因为授权过滤器先于其他过滤器(如果请求未经授权,则将管道短路)。
因此,当用户调用一个没有授权的方法时,我无法记录它(我使用Serilog在服务器上编写日志文件,并且在授权失败时工作正常,但我想将其记录到数据库就像授权很好)。
我尝试在授权之前或之后写入一些过滤器,但我无法做到这一点。可能是我没有以正确的方式思考,而且更简单。
我读这一切,但我没有想出:
Asp.Net Core policy based authorization ends with 401 Unauthorized
How do you create a custom AuthorizeAttribute in ASP.NET Core?
谢谢!
我不知道可以更改过滤器顺序,谢谢@Fionn,我会尝试(并注入记录器) – Johna
问题是,我有自己的“AuthFilter”,我添加授权作为服务而不是MVC选项(services.AddAuthorization(options => {options.AddPoliciy(使用JWT声明)})),像[this](https: //docs.microsoft.com/en-us/aspnet/core/security/authorization/claims) – Johna
我并不是很熟悉MVC声明授权,但是您可以尝试在内置处理程序之前插入过滤器或中间件运行, – Fionn