繁体   English   中英

Microsoft Graph - 使用 Graph SDK 代码库获取特定用户及其 AD 组成员资格

[英]Microsoft Graph - getting a specific user and his AD group memberships using the Graph SDK code base

我开始尝试使用 Microsoft Graph API 来处理在我们的 MS 云中查找数据 - 我被卡住了。 有这么多文档 - 但从来没有正确的......

我正在尝试使用 C#Graphi 客户端 SDK,我想要做的是读取给定用户的详细信息,包括其 AD 组成员身份。

我已经在 Azure AD 中注册了我的应用程序,并且我能够启动并运行IPublicClientApplication并且身份验证也可以正常工作:

IPublicClientApplication app = PublicClientApplicationBuilder
                                       .Create(clientId)
                                       .WithTenantId(tenantId)
                                       .Build();

UsernamePasswordProvider authProvider = new UsernamePasswordProvider(app, scopes);

// creating Graph SDK client 
GraphServiceClient graphClient = new GraphServiceClient(authProvider);

string userName = "......";
var securePassword = new SecureString();

// filling secure password here.....

var users = graphClient.Users
                       .Request()
                       .WithUsernamePassword(userName, securePassword)
                       .Filter("userPrincipalName eq 'someone@myorg.com'")
                       .GetAsync().Result;

这有效 - 我确实获取了有关过滤器中指定用户的基本用户详细信息。

两件事情:

  1. 我不喜欢我必须在每次对客户端的调用中添加.WithUsernamePassword的事实 - 有没有办法将该信息包含在graphClient一次并完成它,直到我注销?

  2. 我正在尝试获得组成员资格。 我可以通过在查询字符串中添加/MemberOf来在 Graph Explorer 中执行此操作 - 但我无法在 Graph SDK 客户端场景中使用它。

我看到很多博客的展示了如何开始使用当前登录的用户的

graphClient.Me.MemberOf.Request().GetAsync();

但我不想要我的组成员身份 - 我想要那些我在搜索过滤器中指定的用户,如上所示。

尝试简单地添加.Expand("memberOf")似乎没有帮助 - 返回的用户对象在其MemberOf属性中仍然没有值。

我错过了什么? 我不敢相信这会如此棘手和困难? 还是我真的需要重新使用针对 REST API 的 HTTP GET 请求? 如果 MS 提供 SDK 和客户端代码,这似乎很奇怪……坦率地说,我更愿意使用它。

要获得特定用户的成员资格,您可以像这样拨打电话

await client.Users["username@domain.com"].MemberOf.Request().GetAsync();

您可以遍历用户列表并将上面代码段中的username@domain.com替换为user.UserPrincipalName属性。

您还可以使用不同的提供程序,以便您只提供一次凭据并在应用程序的生命周期内使用它。 例如,下面的代码使用InteractiveAuthenticationProvider ,它将创建一个浏览器弹出窗口,您将登录一次,您的凭据将用于应用程序中的其余请求。

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri("http://localhost:1256")
    .Build();

InteractiveAuthenticationProvider authProvider = new InteractiveAuthenticationProvider(publicClientApplication, scopes);

GraphServiceClient client = new GraphServiceClient(authProvider);

var users = await client.Users.Request().GetAsync();

foreach (var user in users)
{
    var result = await client.Users[user.UserPrincipalName].MemberOf.Request().GetAsync();
}

您可以根据您的场景将此页面用作一堆身份验证提供程序的参考。 https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM