首页 > 解决方案 > 如何在 Azure Active Directory 中获取用户的“分配的角色”?

问题描述

我正在使用带有注册应用程序的 Azure AD,并且正在使用 Microsoft Graph API 来查询 AD。

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

var memberof = await graphClient.Users[xxx].MemberOf.Request().GetAsync();

我正在使用标准 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"
    }, 

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

标签: azure-active-directorymicrosoft-graph-api

解决方案


1. 微软图形 API

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

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

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

GET    https://graph.microsoft.com/beta/users/{id | userPrincipalName}/appRoleAssignments

我尝试使用 GraphServiceClient(用于 Microsoft Graph 的 .NET SDK),但找不到与 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);

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

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

aadgraphClient.Users["<user guid>"].AppRoleAssignments;

附带说明一下,由于您专门针对 Microsoft Graph API 提出了这个问题,所以我已经相应地回答了。

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

如果您尝试跨应用程序的所有用户,这虽然仅有助于当前用户的角色而不是管理类型的场景。这是一个读取角色声明并根据当前登录用户的应用角色进行授权的示例。

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


推荐阅读