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 意味着应该显示组列表!
我们可以使用 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)
| 归档时间: |
|
| 查看次数: |
3759 次 |
| 最近记录: |