【发布时间】:2020-04-25 13:58:46
【问题描述】:
我有一个 ASP.NET Core 2.1 网站,在 WebApiConfig 文件中包含以下内容:
services.AddMvc(config =>
{
// Force authorization for all controllers
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
})
这会强制所有调用者在调用任何控制器之前进行身份验证。 不幸的是,这也强制用户身份验证访问 OData "$metadata" URL。
有没有办法允许匿名访问元数据页面?
注意:这与下面的问题相同(但针对 .NET Core)
ASP.NET allow anonymous access to OData $metadata when site has global AuthorizeAttribute
【问题讨论】:
-
不是最好的方法,但你可以这样做:joonasw.net/view/apply-authz-by-default。基本上,您构建的东西会按照惯例找到您的控制器,通过向它们添加 AuthorizeFilter 来使它们安全。这将避免将其添加到 OData 中。所以我认为它会起作用。我能想到的另一件事是过滤器。但我不想那样做。
-
感谢@jpgrassi,这可能适用于我定义的 odata 控制器,但约定似乎没有捕获 Microsoft.AspNet.OData.Extensions.AddOData() 注册的 $metadata 控制器我相信。
-
是的,但它的想法是不要抓住它,从而让它保持打开状态(未经身份验证)
-
也许我并不清楚,因为我在手机上输入了这个:您将删除全局
config.Filters.Add(new AuthorizeFilter(policy));,这意味着您的所有控制器(包括由 NuGet 包添加的控制器)都可以公开访问。为了避免必须手动将Authorize添加到所有*您的控制器*,您创建了这个“自动添加”约定。目标是您创建的所有控制器都受到保护,但 OData NuGet 包添加的控制器不受保护。有意义吗?
标签: c# asp.net-core odata