如何使用Azure Active目录在OutLook中获取组成员列表。我已经在Azure门户中注册了我的应用程序。我是这个Azure API的新手。 我的问题是通过C#获取特殊组的成员列表。
我有应用程序,客户端ID,对象ID,租户ID,URI,客户端密钥。但我不知道如何使用它?
我的目标是如果我给组邮件ID意味着应该显示组列表!
答案 0 :(得分:4)
我们可以使用Azure AD Graph列出特定组的成员,您可以从here检查REST。
我们可以使用客户端凭据流对Azure AD进行身份验证,但不需要用户进行互动。要将Azure AD图表与客户端凭据流程一起使用,我们需要首先向应用程序授予应用程序权限,如下所示:
以下是使用此流程打印成员的代码示例供您参考:
安装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}");
}