我正在尝试在我的Web API和Azure函数中实现基于角色的授权。因此,某些角色和相应的AD组看起来像这样
Role AD Group
-----------------------------------
myapp.data.ro GBL ROL IT myapp data RO
myapp.data.rw GBL ROL IT myapp data write
myapp.logs.read GBL ROL IT myapp logs read
myapp.file.read GBL ROL IT myapp file read
myapp.contributor.all GBL ROL IT myapp admin
------------------------------------
因此,我已经在不同的控制器级别上使用Authorize属性实现了授权。
但挑战在于当需求发生变化时,我需要创建团队级别的角色。
所以这就像
myapp.team1.data.ro myapp.team2.data.romyapp.team2.file.read这样
那么,我该如何处理这种情况,当一个新的团队到来时,我该如何在没有任何代码更改的情况下将该团队纳入授权?
最终,我的要求是为不同的团队和不同的级别(如文件、数据、日志等)过滤数据。
我有一个建议,使用一些中间件来管理角色。但同样,这需要代码更改时,新的角色添加,不是吗?
我想在DB中设置角色,中间件根据角色Map检查请求角色,并以成功或禁止响应(403)
请分享一个比这个好的方法。我是一个非常初学者与这些广告组和角色的东西在Azure。
或者,Azure本身是否有用于动态角色管理和授权的服务
1条答案
按热度按时间bmp9r5qi1#
我认为首先您必须确定部署中的角色信息存储在什么地方,以及如何处理修改此信息。
您似乎正在使用Active Directory存储此信息。
现在,什么是处理修改?例如,谁/什么最初创建了您已经拥有的Active Directory组?什么样的事件会触发更改(您/其他人如何知道向AD添加新组,或者更确切地说,您/其他人如何知道有一个新团队?)
如果这些组是为您创建的,则不需要任何其他操作。当新组添加到AD时,应用程序将与它一起正常工作(但有一些警告,如传播时间和服务本身使用的服务帐户/凭据的有限OU范围)。
如果你必须自己创建这些组,有很多方法,你需要决定如何以及什么最适合你/你的堆栈。Microsoft文档中有关于在Azure Active Directory中创建组的详细信息(我假设这是你正在使用的,对于自托管/内部部署Active Directory,它可能会略有不同):https://learn.microsoft.com/en-us/azure/active-directory/roles/groups-create-eligible
你可以调用PowerShell脚本,从你的C#应用程序发出Web请求,或者触发一个Azure函数来执行此操作。如果有一个NuGet包也带有用于交互/向Azure AD添加组的库,我不会感到惊讶。有很多选项。