首页 > 解决方案 > 即使第一个没有成功,Asp.Net Core 策略也会运行所有要求

问题描述

我正在为 Web api 创建自定义策略。我假设在策略中要求经过身份验证的用户会阻止运行其他要求。我知道添加多个要求会迫使它们全部通过,所以基本上我看到多个要求有&&关系,但它们似乎更像是一种&关系。

var requireUser = new AuthorizationPolicyBuilder()
                            .RequireAuthenticatedUser()
                            .RequireClaim("USER_ID")
                            .Build();

options.DefaultPolicy = requireUser;

options.AddPolicy("RequireSomeDatabaseProperty",
                    p => p.Combine(requireUser)
                        .AddRequirements(new SomeDatabasePropertyRequirement));

我发现将进行数据库调用。由于它将基于USER_ID声称我可能不得不在那里放置一个警卫,使requireUser政策完全静音。

这是预期的用途,还是这里有其他问题。combine()不像我认为的那样有效?

如果用户未通过身份验证,我是否可以仅结束对 require 用户的授权过程?

标签: c#asp.net-coreauthenticationauthorizationpolicies

解决方案


这是文档中所述的预期行为

但是您可以通过设置InvokeHandlersAfterFailure为 False来改变这种行为


推荐阅读