我有一个 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
答案 0 :(得分:0)
通过以下实现,您可以匿名访问OData $ metadata并保留对其他任何控制器的身份验证: (如果您之前正确设置了OData服务,则将自动生成一个名称为“元数据”的控制器-此处未包括。)
1。)添加以下课程
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Mvc.Authorization;
public class AuthorizeFiltersControllerConvention :
IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
if (!controller.ControllerName.Contains("Metadata"))
{
controller.Filters.Add(new AuthorizeFilter("defaultPolicy"));
}
}
}
2。)在StartUp类的ConfigureServices方法中,删除现有的addMvc方法并添加以下内容:
services.AddAuthorization(o =>
{
o.AddPolicy("defaultPolicy", b =>
{
b.RequireAuthenticatedUser();
});
});
services.AddMvc(o =>
{
o.Conventions.Add(new AuthorizeFiltersControllerConvention());
})