ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比

Posted

技术标签:

【中文标题】ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比【英文标题】:Role Claims in ASP.NET Core Identity compared to Role Permissions in custom auth 【发布时间】:2018-04-11 21:08:02 【问题描述】:

让我们暂时离开 ASP.NET Identity,假设我们正在为我们的应用程序构建一个自定义身份验证/授权系统。

它将包含以下表格以实现完全的灵活性: 用户 角色 权限 用户角色 角色权限

通过以上内容,我们可以拥有应用程序的完整用户管理部分,管理员可以在其中说用户 A 具有角色 B,角色 B 具有权限 C、D、F。

上述方法过去一直对我有用,但现在让我们切换到使用 ASP.NET Identity 的 ASP.NET Core MVC 应用程序。

尝试在 UserManager 中利用 Microsoft 为您提供的所有 ASP.NET Core Identity 我希望仍然能够实现上述目标,但使用 ASP.NET Core Identity MVC 方式。

我所知道的: 我可以轻松地使用 UserManager 为用户和角色以及用户角色实现 CRUD 页面。

我想弄清楚的: 如何复制“角色具有哪些权限/操作?”的相同行为?概念。

我最初的猜测是,您会将声明与角色结合使用。声明被分配给角色,即 RoleClaims,然后角色被分配给用户。

这样我就可以简单地使用 Authorize 标签检查 Controllers/Action 方法之上的 Roles。此外,如果用户的角色没有声明“DeleteProduct”,则在页面级别更进一步说隐藏/显示删除按钮有点像view-based authorization documentation 所说的。

--

我想弄清楚我是否在正确的道路上使用这些东西。任何建议或更正都会有所帮助。

【问题讨论】:

【参考方案1】:

此人似乎对您的特定问题有潜在的解决方案。

Users Roles Permissions using ASP.NET Core Identity 3

有关索赔和政策的更多信息

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims

基本上

    创建新用户 创建一个新角色 提出新的声明 向角色添加声明 将用户添加到角色 使用声明制定新策略(在配置服务期间) 检查用户是否获得策略授权

注意:不完全确定这是否适用于 ASP.Net Core 2 或您使用的是哪个版本。

【讨论】:

我也在对此进行评估,这样做的一个缺点是 cookie 大小,因为角色声明将流入 cookie。这使得很难拥有许多权限。通常角色和权限在缓存中,然后是传入的用户角色 - 使用缓存数据验证以进行授权,在我看来,这可能是一个很好的解决方案。

以上是关于ASP.NET Core 身份中的角色声明与自定义身份验证中的角色权限相比的主要内容,如果未能解决你的问题,请参考以下文章

关于 ASP.NET Core 中的授权

ASP.NET Core 2 - 身份 - 自定义角色的 DI 错误

获取 ASP .Net Core WebAPI 中的所有身份角色

ASP .NET CORE 2.2 JWT 和声明网站的身份验证

通过 ASP.NET 核心身份中的角色声明进行 JWT 身份验证

ASP.NET Core Jwt 实现 signinmanager 声明