如果自定义身份验证成功,如何制作在 [授权] 之前运行的自定义身份验证过滤器并禁用它?

时间:2021-04-21 17:48:14

标签: c# asp.net asp.net-core asp.net-core-3.1 asp.net-core-5.0

我想为某些控制器中的某些操作提供额外的查询字符串参数身份验证。我希望它绕过 [Authorize],但在此自定义查询字符串身份验证失败时使用它。

我尝试将 IAuthorizationFilter 与 IOrderedFilter 与 Order = 0 一起使用,但它似乎在 .net 3.1+ 中不再起作用。

基本上我希望我的过滤器检查查询字符串键,如果此身份验证失败,它会将工作流传递给 [Authorize] 过滤器。

但如果我的自定义身份验证过滤器成功 - 它应该禁用 [授权] 并直接执行操作。

1 个答案:

答案 0 :(得分:0)

我发现的最佳选择是使用策略。在策略中,我可以检查我的自定义身份验证,如果它不起作用,请检查 (context.User.Identity.IsAuthenticated) 是否为默认身份验证。

供您参考。自定义过滤器不起作用。 IOverrideAuthorizationFilter 不是 asp.net core 3.1+ 的一部分,所以不要去那里。 自定义中间件不会让您有机会覆盖身份验证过滤器。

最好的选择是使用策略。微软官方文档在这方面做了很好的解释。