使用 Entra ID 和 ASP.NET core 进行基于权限的访问控制

问题描述 投票:0回答:1

我正在为我的团队正在创建的一系列新服务设计一个许可系统。 这是我第一次与使用 Entra ID 进行授权管理的客户进行此操作。过去,我曾与使用手动滚动 UI 进行管理的客户打过交道。

我希望系统是基于权限的访问控制而不是基于角色的访问控制。 考虑一个场景,其中我有

trader.senior
trader.junior
角色。我已经在 EntraId 中针对我的应用程序创建了这些应用程序角色,并将它们分配给我的测试用户。然而,这需要我用
/executeTrade
来保护我的
[Authorize(Roles = "trader.senior, trader.junior")]
端点。

我希望能够做到

[MyCustomAuthorizaion(permission = "trade.execute"]
。这意味着我需要创建一个名为
trade.execute
的权限,并将该权限分配给
trader.senior
trader.junior
角色。

但是,我一直不知道如何在 Entra ID 上进行设置。这是不可能的,还是我只是找错地方了?我应该采取完全不同的方法吗?

我考虑过的替代方法:

  • 使用 Entra Groups 需获得我的许可。这将使我能够拥有
    Senior Trader
    Junior Trader
    组以及
    trade.execute
    角色。然后我可以将
    trade.execute
    角色分配给上述组,并将用户分配给这些组。
  • 创建一个自定义层,我可以管理哪些权限属于哪个角色。这将需要额外的数据存储(用于角色权限)映射、管理该存储的屏幕,以及使用每个(假设没有缓存)请求查询该存储。
asp.net-core azure-active-directory authorization microsoft-entra-id
1个回答
0
投票

注意:Microsoft Entra ID 不支持您所描述的基于权限的访问控制,即权限直接分配给角色。您将需要实施自定义解决方案来实现此功能。

  • 构建自定义层来管理角色到特定权限的映射。

否则正如您所提到的,您可以使用Entra Groups来管理权限:

  • 创建
    Senior Trader
    Junior Trader
  • 等群组
  • 并为这些组分配角色。
  • 这将允许您在组级别管理权限,这比处理单个角色权限映射更简单。

创建群组:

enter image description here

根据您的要求在 Microsoft Entra ID 应用程序中创建应用程序角色

enter image description here

并将角色分配给企业应用程序中的组:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.