如何移除/禁用ASP.NET Core Identity管理页的双因素认证和个人数据功能
解决ASP.NET Core Identity移除Manage页面功能并禁用访问的方案
你已经完成了前端导航入口的隐藏操作,但Identity内置的Razor Page仍然支持直接路径访问,按照以下步骤操作即可完全禁用这两个功能:
步骤1:确认导航入口隐藏(你已完成)
你已经为Account/Manage/Layout添加了基架,且删除了双因素认证、个人数据对应的<li>导航元素,这一步已经完成了前端入口的隐藏,接下来需要处理后端直接访问的问题。
步骤2:禁用路径直接访问,可选择以下任意一种方案
方案1:覆盖对应页面实现跳转/404(改动最小,推荐)
- 给目标页面添加Identity基架:右键项目 → 新增 → 基架项 → 选择Identity → 勾选
Account/Manage分类下的TwoFactorAuthentication和PersonalData,选择你的项目DbContext后确认添加。 - 打开
Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs文件,修改所有请求处理方法,直接返回跳转或者404:
// 覆盖Get请求逻辑 public async Task<IActionResult> OnGetAsync() { // 跳转到Manage首页,也可以返回NotFound() return RedirectToPage("./Index"); } // 覆盖Post请求逻辑 public async Task<IActionResult> OnPostAsync() { return RedirectToPage("./Index"); }
- 重复上述操作修改
PersonalData.cshtml.cs中的所有请求处理方法即可。
方案2:全局配置拦截访问路径
打开Startup.cs文件,在Configure方法的路由配置部分添加拦截规则:
app.UseEndpoints(endpoints => { // 拦截双因素认证所有请求 endpoints.MapGet("/Identity/Account/Manage/TwoFactorAuthentication", context => { context.Response.StatusCode = 404; return Task.CompletedTask; }); endpoints.MapPost("/Identity/Account/Manage/TwoFactorAuthentication", context => { context.Response.StatusCode = 404; return Task.CompletedTask; }); // 拦截个人数据所有请求 endpoints.MapGet("/Identity/Account/Manage/PersonalData", context => { context.Response.StatusCode = 404; return Task.CompletedTask; }); endpoints.MapPost("/Identity/Account/Manage/PersonalData", context => { context.Response.StatusCode = 404; return Task.CompletedTask; }); // 保留原有其他路由配置 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); });
如果需要完全禁用双因素认证功能,还可以在ConfigureServices的Identity配置中添加规则:
services.AddIdentity<IdentityUser, IdentityRole>(options => { // 全局禁用双因素认证 options.SignIn.RequireConfirmedAccount = false; options.Tokens.AuthenticatorTokenProvider = null; // 保留原有其他配置 }) .AddEntityFrameworkStores<你的DbContext类名>() .AddDefaultTokenProviders();
验证效果
配置完成后重启项目,直接访问两个目标路径会返回404或者跳转到指定页面,同时Manage首页没有对应功能入口,两个功能完全禁用。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

