我有一个使用 Azure AD 进行身份验证的运行最少的 .NET Core 3 Web 应用程序,但我正在尝试弄清楚如何在我自己的 SQL 数据库中使用我自己的自定义角色进行授权。
最终,我想验证用户,然后从我的数据库中获取其关联的角色并从那里创建策略。 我不怕研究,但我的搜索并没有找到任何看起来正确的东西。 谁能指出我正确的方向?
AFAIK 最接近于满足你要求的 Azure AD 功能是应用程序角色。
您可以在此处阅读有关Microsoft文档的更多详细信息 - 应用程序角色
下面是一个相关的代码示例 - 使用应用角色和角色声明向 ASP.NET 核心 Web 应用添加授权
简而言之,你将能够定义特定于应用程序的 Azure AD 清单的角色。稍后,可以从 Azure 门户将这些角色分配给用户Microsoft或使用图形 API。
"appRoles": [
{
"allowedMemberTypes": [
"User"
],
"description": "Creators can create Surveys",
"displayName": "SurveyCreator",
"id": "1b4f816e-5eaf-48b9-8613-7923830595ad",
"isEnabled": true,
"value": "SurveyCreator"
},
{
"allowedMemberTypes": [
"User"
],
"description": "Administrators can manage the Surveys in their tenant",
"displayName": "SurveyAdmin",
"id": "c20e145e-5459-4a6c-a074-b942bbd4cfe1",
"isEnabled": true,
"value": "SurveyAdmin"
}
],
请注意,角色定义本身以及有关哪些用户已分配角色的信息都将位于 Azure AD 中(而不是问题中提到的 SQL 数据库(。
现在,在登录到 Web 应用时,你将获得角色作为具有传入访问令牌的声明集合。
下面是另一个很好的文档,它通过示例解释了基于角色和基于资源的授权,并使用了授权策略。
如果这些对您的应用程序都没有意义,您可以随时实现一些自定义内容,并将角色信息和分配存储在应用程序数据库中。
在这种情况下,Azure AD 对定义或分配角色没有多大帮助。您需要以自定义方式维护用户及其角色之间的映射。如果有意义,您可以使用 RoleManager 类。