如何获取 AAD 组成员?

2 c# azure azure-active-directory azure-web-app-service microsoft-graph-api

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

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

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

Fei*_*SFT 5

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

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

在此处输入图片说明

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

安装 Active Directory 身份验证库:

Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Run Code Online (Sandbox Code Playgroud)

安装 Microsoft Azure Active Directory 图形库:

Install-Package Microsoft.Azure.ActiveDirectory.GraphClient
Run Code Online (Sandbox Code Playgroud)

代码:

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 membersResoult = groupFetcher.Members.ExecuteAsync().Result;
    PrintMembers(membersResoult);

    while (membersResoult.MorePagesAvailable)
    {
        membersResoult = membersResoult.GetNextPageAsync().Result;
        PrintMembers(membersResoult);
    }

    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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

安装帮助解码令牌的包(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}");
}
Run Code Online (Sandbox Code Playgroud)