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 2 - 身份 - 自定义角色的 DI 错误
获取 ASP .Net Core WebAPI 中的所有身份角色
ASP .NET CORE 2.2 JWT 和声明网站的身份验证