禁止访问中的所有标识页面.NET核心3.1 MVC



有没有一种干净的方法可以完全阻止访问安装时创建的/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个操作:

  1. Visual Studio删除文件夹Areas及其内部的所有内容。

  2. 删除NuGet包Microsoft.AspNetCore.Identity.UI

如果您希望一些用户访问这些页面,您可以根据自动授权策略阻止路径。

services.AddRazorPages(options => {
options.Conventions.AuthorizeFolder("/Path", "policy name");
});
services.AddAuthorization(options => {
options.AddPolicy("policy name", policy => ... );
});

最新更新