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

时间:2019-02-25 13:21:06

标签: azure azure-active-directory microsoft-graph

我是天蓝色的陌生人。

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

我已经阅读了有关Microsoft图形API的信息。不确定这对我的情况是否有用。

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

1 个答案:

答案 0 :(得分:1)

用于获取组和角色信息的API

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

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

在这里我将列出其中的3个,您应该有一些想法可以选择。

  • memberOf-

    获取用户直接所属的组和目录角色。

    注意:仅此成员的直接成员身份很重要,请检查不传递(即,用户必须是该组的直接成员才能返回该组。如果用户是该组的成员1 ,但该group1是group2的成员,则不会返回group2。对于某些情况,此行为可能是可以的,但对于其他情况则不是)

    GET /users/{id | userPrincipalName}/memberOf
    
  • getMemberGroups

    POST /users/{id | userPrincipalName}/getMemberGroups
    

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

  • getMemberObjects

    返回用户所属的所有组,目录角色和管理单元。支票再次可传递

实施和代码示例。如何获取令牌,调用API等。

  • 获取令牌进行身份验证

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

  • 与Microsoft Graph API端点进行交互

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

  • 代码示例

    Microsoft Graph Connect Sample for ASP.NET Core 2.1

    重要部分。请查看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);
                }
    

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