如何在 Azure Active Directory 中获取用户的“分配角色”?

Len*_*y D 3 azure-active-directory microsoft-graph-api

我将 Azure AD 与注册的应用程序一起使用,并使用 Microsoft Graph API 来查询 AD。

下面的代码告诉用户被分配到哪些组

var memberof = await graphClient.Users[xxx].MemberOf.Request().GetAsync();
Run Code Online (Sandbox Code Playgroud)

我正在使用标准 AD 套餐,似乎组受到一定限制,我需要购买“高级 AD 套餐”才能充分使用它们。

所以我不想使用群组信息。我对我分配给我的用户的角色感兴趣,这些角色已放入我的应用程序清单中。

例如

"appRoles": [
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Case Manager",
      "id": "{A_Guid}",
      "isEnabled": true,
      "description": "Case Manager's can create and assign Cases to other users",
      "value": "CaseManager"
    }, 
Run Code Online (Sandbox Code Playgroud)

那么,如何使用 Graph Api 来告诉我用户是否具有特定角色?

Roh*_*gal 5

1. 微软图形API

目前,读取分配给用户的所有应用程序特定角色(即 AppRoleAssignments)的功能仅作为Microsoft Graph API beta 端点的一部分提供。v1.0 中不提供此功能。您可以在此处阅读有关版本的信息

从名称“beta”可以明显看出,它预计不会成为生产应用程序可以依赖的稳定版本。阅读Marc LaFleur 的这篇 SO 帖子中的更多具体要点

精确的 API(Microsoft 文档参考):

GET    https://graph.microsoft.com/beta/users/{id | userPrincipalName}/appRoleAssignments
Run Code Online (Sandbox Code Playgroud)

我尝试使用 GraphServiceClient(.NET SDK for Microsoft Graph),但无法找到与 AppRoleAssignments 相关的任何内容。(可能是因为 SDK 使用稳定 1.0 版本而不是 beta 版本的元数据)

无论如何,如果您仍然可以对此进行测试,请使用 Microsoft Graph Explorer 或直接从 C# 代码调用端点

string graphRequest = $"https://graph.microsoft.com/beta/users/{my user GUID}/appRoleAssignments";
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, graphRequest);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
HttpResponseMessage response = await client.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)

2.Windows Azure AD 图形 API

尽管建议尽可能使用 Microsoft Graph API,但在某些情况下 Microsoft Graph 还没有跟上,因此你被迫使用 Azure AD Graph API。应用程序管理相关的案例就是其中一些。

因此,您可以使用此 Azure AD Graph API。我从Azure AD Graph Explorer快速测试了这一点,它运行良好。

https://graph.windows.net/{yourtenantid}/users/{id}/appRoleAssignments?api-version=1.6
Run Code Online (Sandbox Code Playgroud)

就像适用于 .NET 的 Microsoft 图形库一样,您可以使用适用于 .NET 的 Azure AD 图形客户端库,您的代码将如下所示。

aadgraphClient.Users["<user guid>"].AppRoleAssignments;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,由于您专门针对 Microsoft Graph API 提出了这个问题,所以我已经做出了相应的回答。

至少对于当前登录应用程序的用户来说,您始终可以从作为 Azure Active Directory 访问令牌的一部分提供的角色声明中找到分配给他们的应用程序角色。

尽管这仅对当前用户的角色有帮助,但如果您尝试遍历应用程序的所有用户,则对管理场景没有帮助。以下示例读取角色声明并根据当前登录用户的应用程序角色进行授权。

使用 Azure AD 应用程序角色和角色声明在 Web 应用程序中进行授权