ASP.NET CORE MVC 身份用户和角色不起作用

Posted

技术标签:

【中文标题】ASP.NET CORE MVC 身份用户和角色不起作用【英文标题】:ASP.NET CORE MVC identity users and roles doesn't work 【发布时间】:2021-11-02 12:29:28 【问题描述】:

我有一个启用了身份的 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 以获取经过身份验证的用户角色的功能。

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

【问题讨论】:

您是否使用AuthorizeAttribute 标记了您的控制器/页面? @Marco:我没有。我希望在授权发生之前进行身份验证,不是吗?在应用程序强制授权之前应该有一个会话 cookie。使用默认身份,控制器未标记授权属性,但仍强制执行身份验证。 @Marco:那么可以使用这种工作方式,更具体地说,使用 authorize 来装饰控制器吗?我没有任何具体要求,只是希望身份验证/授权能够正常工作。 我给你两种可能性。让我写一个答案 【参考方案1】:

你有两种可能:

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

请注意,这也会保护您的登录端点,因此您必须通过使用[AllowAnonymous] 装饰它们来排除它们。

详情:

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-5.0#rau

【讨论】:

以上是关于ASP.NET CORE MVC 身份用户和角色不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core - 使用 WebAPI 和 MVC 前端的 JWT 身份验证不起作用

ASP.NET Core 身份角色、声明和用户

如何使用 asp.net mvc 从头开始​​添加用户角色

在 asp.net mvc 5 中使用身份自定义用户和角色

如何在 ASP.NET Core 中将角色添加到 Windows 身份验证

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?