以编程方式从 Azure AD 获取用户组和角色

New*_*vRo 3 azure azure-active-directory microsoft-graph-api

我是天蓝色 AD 的新手。

我有一个第三方 API,它为我提供了 userId。我编写了一个 .NET Core API,它应该采用此用户 ID 并获取该特定用户的角色和组。

我读过有关 microsoft graph API 的内容。不确定这在我的场景中是否有用。

还有其他方法可以以编程方式访问 AD 用户的角色和组吗?

Roh*_*gal 6

使用哪个 API 来获取组和角色信息

首先,Microsoft Graph API 是获取所需信息的最佳选择。

哪种 API 最适合您取决于您​​的场景(a. 您是否需要顶级直接成员身份或传递检查?b. 您是否只需要安全组甚至 O365 组?),因此您是最好的判断者。

我将在这里列出其中的 3 个,您应该可以从中找到一些想法。

  • 成员-

    获取用户是其直接成员的组和目录角色。

    注意:只有直接成员资格对此很重要,检查不是传递性的(即用户必须是该组的直接成员才能返回该组。如果用户是组 1 的成员,但组 1 是组 2 的成员,则group2 将不会被返回。这种行为对于某些情况可能没问题,但对于其他情况则不然)

    GET /users/{id | userPrincipalName}/memberOf
    
    Run Code Online (Sandbox Code Playgroud)
  • 获取成员组

    POST /users/{id | userPrincipalName}/getMemberGroups
    
    Run Code Online (Sandbox Code Playgroud)

    返回用户所属的所有组。检查这个是否是Transitive 的,因此您可以放心,所有组都将被返回。作为 1 个请求的一部分返回最多 2046 个。它还适用于 O365 组,您可以使用参数过滤到 SecurityEnabled 组

  • 获取成员对象

    返回用户所属的所有组、目录角色和管理单位。检查再次具有传递性

实现和代码示例..如何获取token,调用API等。

  • 获取Token进行认证

    您应该使用 MSAL 或 ADAL 库,具体取决于您使用 MSAL for v2 和 ADAL for v1 的 Azure AD 终结点。使用这些库不是强制性的,但建议使用,因为它们将遵循最佳实践并为您完成繁重的工作。

  • 与 Microsoft Graph API 端点交互

    由于您使用 .NET 编写,因此可以使用 Microsoft Graph Client Library for .NET (SDK)。同样,使用客户端库不是强制性的,但它会使您的代码更具声明性并且更加方便。如果需要,您始终可以使用 HttpClient 并直接访问 REST 端点。

  • 代码示例

    ASP.NET Core 2.1 的 Microsoft Graph Connect 示例

    重要部分..查看 GraphService.cs 文件中获取用户信息的方法,例如

      // Load user's profile in formatted JSON.
        public static async Task<string> GetUserJson(GraphServiceClient graphClient, string email, HttpContext httpContext)
            {
                if (email == null) return JsonConvert.SerializeObject(new { Message = "Email address cannot be null." }, Formatting.Indented);
    
                try
                {
                    // Load user profile.
                    var user = await graphClient.Users[email].Request().GetAsync();
                    return JsonConvert.SerializeObject(user, Formatting.Indented);
                }
    
    Run Code Online (Sandbox Code Playgroud)

    注意:该示例使用委派权限。您可能需要直接使用应用程序权限或代表流程(如果您想在用户的上下文中执行此操作),因为您提到您的 API 正在被调用。此外,这只是您应该查看以了解如何使用 SDK 的示例之一,但是一旦您开始进一步研究 Microsoft Graph API 和客户端库文档,就有许多可用的示例。如果我找到更接近您的确切场景的示例,我会更新答案。