使用 .NET Core 3 Azure AD 身份验证的自定义角色

Custom Role with .NET Core 3 Azure AD Authentication

我有一个使用 Azure AD 进行身份验证的最低功能 .NET Core 3 Web 应用程序,但我想弄清楚如何在我自己的 SQL 数据库中使用我自己的自定义角色进行授权。

最后,我想验证用户,然后从我的数据库中获取他们的关联角色并从那里创建策略。我不怕研究,但我的搜索并没有找到任何看起来正确的东西。谁能指出我正确的方向?

据我所知,对您的要求最有帮助的 Azure AD 功能是应用程序角色。

您可以在此处的 Microsoft 文档中阅读有关它的更多详细信息 - Application Roles

这是一个相关的代码示例 - Add authorization using app roles & roles claims to an ASP.NET Core web app

简而言之,您将能够定义特定于应用程序的 Azure AD 清单的角色。稍后您可以将这些角色分配给 Azure 门户中的用户或使用 Microsoft Graph 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 应用程序时,您将获得作为带有传入访问令牌的声明集合的角色。

这是另一个很好的文档,它通过示例解释了 Role based and Resource based authorization 并使用了授权策略。


如果 none 这对您的应用程序有意义,您总是可以实现一些自定义的东西并在您的应用程序数据库中存储角色信息和分配。

Azure AD 对定义或分配该场景中的角色帮助不大。您将需要以自定义方式维护用户及其角色之间的映射。如果有意义,您可以使用 RoleManager class.