在不更改代码的情况下向.net Core Web API授权中添加新角色



我正试图在我的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。或myapp.team2.data。或myapp.team2.file。这样读

那么我该如何处理这种情况?当一个新的团队到来时,我该如何在不更改代码的情况下将该团队纳入授权?

最终我的要求是过滤不同团队和不同级别的数据,如文件,数据,日志等。

我有一个建议,使用一些中间件来管理角色。但是,当添加新角色时,又需要更改代码,不是吗?

我想在数据库中有角色,中间件根据角色映射检查请求角色,并响应成功或禁止(403)

请分享比这更好的方法。我是Azure中AD组和角色的初学者。

或者Azure本身是否有用于动态角色管理和授权的服务

我认为首先您必须确定是什么在您的部署中存储角色信息,以及将由什么来处理修改这些信息。

您似乎正在使用活动目录来存储此信息。

现在,什么是处理修改?例如,最初是谁/什么创建了您已经拥有的活动目录组?什么样的事件会触发变化(你/其他人怎么知道添加一个新的组到AD,或者你/其他人怎么知道有一个新的团队?)

如果这些组是为您创建的-不需要其他任何东西。当一个新组被添加到AD时,应用程序将正常工作(有一些警告,如传播时间和服务本身使用的服务帐户/凭据的有限OU范围)。

如果你必须自己创建这些组…有很多方法,你需要决定如何以及什么最适合你/你的堆栈。微软文档有关于在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中交互/添加组,我也不会感到惊讶。有很多选项。

最新更新