首页 > 解决方案 > ASP.NET CORE MVC 身份用户和角色不起作用

问题描述

我有一个启用了身份的 ASP.NET CORE MVC 3.1 应用程序:

services.AddIdentity<IdentityUser,IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();

数据库上下文继承自身份:

ApplicationDbContext : IdentityDbContext

启动配置:

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
  endpoints.MapControllerRoute(
  name: "default",
  pattern: "{controller=Home}/{action=Index}/{id?}");
  endpoints.MapRazorPages();
}); 

但是,它在浏览应用程序时不会强制执行身份验证。但是,如果我使用 services.AddDefaultIdentity,它可以工作,但我失去了访问 RolManager 以获取经过身份验证的用户角色的功能。

您能否告知我需要做什么来强制执行身份验证?

标签: c#asp.net-core-mvcasp.net-identityasp.net-core-3.1

解决方案


你有两种可能:

  1. 用 装饰您想要保护的每个端点[Authorize]。这在更大的代码库中会变得非常重复。
  2. 在您的端点上全局要求授权:
    app.UseEndpoints(endpoints =>
     {
         //or | and  MapControllersWithViews()
         endpoints.MapControllers().RequireAuthorization();
         endpoints.MapRazorPages().RequireAuthorization();
     });

请注意,这也将保护您的登录端点,因此您必须通过使用[AllowAnonymous].

细节:


推荐阅读