Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使自定义身份验证筛选器在[Authorize]之前运行,并在自定义身份验证成功时禁用它?_C#_Asp.net_Asp.net Core_Asp.net Core 3.1_Asp.net Core 5.0 - Fatal编程技术网

C# 如何使自定义身份验证筛选器在[Authorize]之前运行,并在自定义身份验证成功时禁用它?

C# 如何使自定义身份验证筛选器在[Authorize]之前运行,并在自定义身份验证成功时禁用它?,c#,asp.net,asp.net-core,asp.net-core-3.1,asp.net-core-5.0,C#,Asp.net,Asp.net Core,Asp.net Core 3.1,Asp.net Core 5.0,我想为某些控制器中的某些操作提供额外的查询字符串参数身份验证。我希望它绕过[Authorize],但如果此自定义查询字符串身份验证失败,则使用它 我曾尝试将IAuthorizationFilter与Order=0的IOrderedFilter一起使用,但在.net 3.1+中似乎不再有效 基本上,我希望我的过滤器检查查询字符串密钥,如果此身份验证失败,它将把工作流传递给[授权]过滤器 但是如果我的自定义身份验证筛选器成功,它应该禁用[授权]并直接执行操作。我发现的最佳选项是使用策略。在策略中,我

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

我曾尝试将IAuthorizationFilter与Order=0的IOrderedFilter一起使用,但在.net 3.1+中似乎不再有效

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


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

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

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


最好的选择是使用策略。关于这个问题,微软官方文档做了很好的解释。

您是否将凭证/api密钥/令牌放在URL查询中?我强烈反对这样做。URL存储在浏览器历史记录中,并在Referrer HTTP标头中转发到您的站点可能链接到的其他站点。您确定要这样做吗?根据您的描述,我假设您要使用两种或更多的身份验证方法来验证请求,如果这些身份验证方法中的任何一种成功,它应该访问资源,对吗?如果是这种情况,您可以在自定义身份验证中对其进行验证,然后在控制器或操作方法的标题处添加自定义身份验证属性,不要添加
[Authorize]
属性。你可以参考我的答复。