有没有一种干净的方法可以完全阻止访问安装时创建的/Areas/Identity
/文件夹中的所有页面。NET标识?我希望我能在startup.cs
做点什么。
我尝试创建一个从ActionFilter
:继承的筛选器
public class PreventAccessToIdentityFolderFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var request = context.HttpContext.Request;
if (request.Path.HasValue && request.Path.Value.ToLower().StartsWith("/identity"))
{
context.HttpContext.Response.Redirect("/");
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
//throw new NotImplementedException();
}
}
然后在MVC和Razor Pages中注册(因为新的Identity UI使用Razor Page(:
services.AddRazorPages()
.AddMvcOptions(o => {
o.Filters.Add(new PreventAccessToIdentityFolderFilter());
});
var mvcBuilder = services.AddControllersWithViews(o => {
var policy = new Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter(policy));
o.Filters.Add(new PreventAccessToIdentityFolderFilter());
});
过滤器在所有MVC操作上运行,但不在任何Identity Razor页面上运行。
必须有一种简单的方法来完全禁止访问/Identity
区域/剃刀页面?
需要2个操作:
-
Visual Studio删除文件夹
Areas
及其内部的所有内容。 -
删除NuGet包
Microsoft.AspNetCore.Identity.UI
如果您希望一些用户访问这些页面,您可以根据自动授权策略阻止路径。
services.AddRazorPages(options => {
options.Conventions.AuthorizeFolder("/Path", "policy name");
});
services.AddAuthorization(options => {
options.AddPolicy("policy name", policy => ... );
});