如何获得AAD小组成员?

时间:2017-03-06 06:54:33

标签: c# azure azure-web-sites azure-active-directory microsoft-graph

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

我有应用程序,客户端ID,对象ID,租户ID,URI,客户端密钥。但我不知道如何使用它?

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

1 个答案:

答案 0 :(得分:4)

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

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

enter image description here

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

安装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 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);
        }
    }
}

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

安装软件包以帮助解码令牌(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}");
}