【问题标题】:Microsoft Graph - getting a specific user and his AD group memberships using the Graph SDK code baseMicrosoft Graph - 使用 Graph SDK 代码库获取特定用户及其 AD 组成员身份
【发布时间】:2020-03-21 14:50:09
【问题描述】:

尝试使用 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. 我正在尝试获取组成员资格。我可以在 Graph Explorer 中通过将 /MemberOf 添加到我的查询字符串来执行此操作 - 但我无法让它在 Graph SDK 客户端场景中工作。

我看到很多博客展示了如何使用

获取当前登录用户的
graphClient.Me.MemberOf.Request().GetAsync();

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

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

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

【问题讨论】:

    标签: c# microsoft-graph-sdks group-membership


    【解决方案1】:

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

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

    您可以遍历用户列表并将上面sn-p中的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

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2021-08-15
      相关资源
      最近更新 更多