c# - 如何使用 Microsoft Graph API 获取用户所属的组名?

标签 c# azure azure-active-directory microsoft-graph-api asp.net-core-webapi

我想知道用户在 AAD 中所属的组列表。根据组的成员资格,他们可以执行另一项功能。为了实现此目的,我使用了 MS Graph API,但我只获得组 ID,而不是组名称。 我使用图 API 使用了以下两种方式。 使用第一种方法,

await  graphClient.Users[upn].GetMemberGroups(false).Request().PostAsync()

回复:

[ "fee2c45b-915a-4a64-b130-f4eb9e75525e", "4fe90ae7-065a-478b-9400-e0a0e1cbd540", "e0c3beaf-eeb4-43d8-abc5-94f037a65697" ]

使用第二种方法,

await  graphClient.Users[upn].MemberOf.Request().GetAsync();

回复:

[
    {
        "deletedDateTime": null,
        "id": "1c4934554-5006-403a-bf4f-bsdfeerwfs6fe6f",
        "oDataType": "#microsoft.graph.group",
        "additionalData": {
            "creationOptions": [],
            "isAssignableToRole": null,
            "resourceBehaviorOptions": [],
            "resourceProvisioningOptions": []
        }
    },
    {
        "deletedDateTime": null,
        "id": "f8975c2f-7651d-4f3a-1234-4ec3808a0ac2",
        "oDataType": "#microsoft.graph.group",
        "additionalData": {
            "creationOptions": [
                []
            ],
            "isAssignableToRole": null,
            "resourceBehaviorOptions": [],
            "resourceProvisioningOptions": [
                []
            ]
        }
    }
]

我需要的是组名称和组 ID。我如何以有效的方式将两者结合在一起?或者我可以尝试其他任何方法来实现此目的吗?

最佳答案

对我来说,以下方法可以获取组名称:

var page = await graphClient
    .Users[userObjectId]
    .MemberOf
    .Request()
    .GetAsync();

var names = new List<string>();
names.AddRange(page
        .OfType<Group>()
        .Select(x => x.DisplayName)
        .Where(name => !string.IsNullOrEmpty(name)));
while (page.NextPageRequest != null)
{
    page = await page.NextPageRequest.GetAsync();
    names.AddRange(page
        .OfType<Group>()
        .Select(x => x.DisplayName)
        .Where(name => !string.IsNullOrEmpty(name)));
}

return names;

如果允许的话,组的响应中应该有一个 DisplayName/displayName(例如 Directory.Read.All)。

关于c# - 如何使用 Microsoft Graph API 获取用户所属的组名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63502897/

相关文章:

c# - 哪个换行符同时适用于 C# 和 HTML?

c# - 仅为 WCF 服务上可用的服务契约(Contract)接口(interface)之一生成客户端

c# - System.Net.Http 依赖问题

azure - 在 Azure DevOps 中创建新的 Kubernetes 服务连接时,您似乎没有有效的 Azure 订阅

c# - Azure AD B2C 错误 - IDX10501 : Signature validation failed

c# - 让 FluentValidation 调用具有多个参数的函数

c# - "Function lookup table"代替开关

azure - Microsoft Graph API 中的一个或多个属性包含无效值

c# - 使用 UploadFromStreamAsync 上传文件后 Azure blob 文件损坏

azure - 如何防止外部租户在 Azure AD 中为自己分配应用程序角色?