【问题标题】:How to Get the AAD group member?如何获取 AAD 组成员?
【发布时间】:2017-07-25 22:46:32
【问题描述】:

如何使用 Azure Active Directory 在 OutLook 中获取组成员列表。我已经在 Azure 门户中注册了我的应用程序。我是这个 Azure API 的新手。 我的问题是通过 C# 获取特定组的成员列表。

我有应用程序、客户端 ID、对象 ID、租户 ID、URI、客户端密码。但是不知道怎么用?

我的目标是如果我给组邮件 ID 意味着应该显示组列表!

【问题讨论】:

    标签: c# azure azure-web-app-service azure-active-directory microsoft-graph-api


    【解决方案1】:

    我们可以使用 Azure AD Graph 列出特定组的成员,您可以从here 查看 REST。

    我们可以使用 客户端凭据流 向 Azure AD 进行身份验证,无需用户交互。并且要将 Azure AD Graph 与 Client Credentials flow 一起使用,我们需要首先向应用授予 应用程序权限,如下所示:

    以下是使用此流程打印成员的代码示例供您参考:

    安装 Active Directory 身份验证库:

    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    

    安装 Microsoft Azure Active Directory 图形库:

    Install-Package Microsoft.Azure.ActiveDirectory.GraphClient
    

    代码:

    static void Main(string[] args)
    {
        string authority = "https://login.microsoftonline.com/{0}";
        string graphResourceId = "https://graph.windows.net";
        string tenantId = "xxxx.onmicrosoft.com";
        string clientId = "";
        string secret = "";
    
        authority = String.Format(authority, tenantId);
        Uri servicePointUri = new Uri(graphResourceId);
        Uri serviceRoot = new Uri(servicePointUri, tenantId);
    
        AuthenticationContext authContext = new AuthenticationContext(authority);
        var accessToken = authContext.AcquireTokenAsync(graphResourceId, new ClientCredential(clientId, secret)).Result.AccessToken;
    
        ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await Task.FromResult(accessToken));
        var groupFetcher = (IGroupFetcher)activeDirectoryClient.Groups.ExecuteAsync().Result.CurrentPage.First(g => g.Mail == "group1@xxxx.onmicrosoft.com");
        var membersResult = groupFetcher.Members.ExecuteAsync().Result;
        PrintMembers(membersResoult);
    
        while (membersResoult.MorePagesAvailable)
        {
            membersResoult = membersResoult.GetNextPageAsync().Result;
            PrintMembers(membersResult);
        }
      
        Console.ReadLine();
    
    }
    
    static void PrintMembers(IPagedCollection<IDirectoryObject> pageCollection)
    {
        foreach (var member in pageCollection.CurrentPage)
        {
            var user = member as Microsoft.Azure.ActiveDirectory.GraphClient.User;
            if (user != null)
                Console.WriteLine(user.DisplayName);
            else
            {
                var groupMember = member as Microsoft.Azure.ActiveDirectory.GraphClient.Group;
                Console.WriteLine(groupMember.DisplayName);
            }
        }
    }
    

    更新(附加代码以显示令牌中的声明)

    安装包帮助解码token(install-package System.IdentityModel.Tokens.Jwt)

    string accessToken = "";
    var handler = new JwtSecurityTokenHandler();
    var tokenS = handler.ReadToken(accessToken) as JwtSecurityToken;
    
    foreach (var claim in tokenS.Claims)
    {
        Console.WriteLine($"{claim.Subject}:{claim.Value}");
    }
    

    【讨论】:

    • Result.CurrentPage.First(g => g.ObjectId == "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx") 这里ObjectId代表Group ID?跨度>
    • 是的。我们也可以用g.DisplayName == "group1"这样的组名替换它。
    • 如何获取组 ID?我只有群组邮件 ID! :-(
    • 使用群邮件ID,可以使用g =&gt; g.Mail == "group1@xxxx.onmicrosoft.com"这样的代码
    • token是base64编码字符串,我们可以使用code自己解码。我已更新帖子以附加代码供您参考。
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2020-09-14
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多