c# - Azure AD B2C 和图 : cannot list users with memberOf

标签 c# .net azure azure-ad-b2c azure-ad-graph-api

我正在尝试列出 B2C 租户中的用户及其所属组。我正在应用程序模式下连接到图表,如下所示:

var clientCred = new ClientCredential("<client id>",  "<secret>");
var authContext = new AuthenticationContext("https://login.windows.net/" + "<b2c tenant>");
var authResult = authContext.AcquireTokenAsync("https://graph.microsoft.com/", clientCred).Result;
var client = new GraphServiceClient(
    new DelegateAuthenticationProvider(
        async (requestMessage) =>
        {
            var token = authResult.AccessToken;
            var result = await Task.FromResult(token);

            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
        }));

var users = client
    .Users
    .Request()
    .Select("memberOf")  // not working
    //.Select(u => new { u.MemberOf }) // not working
    .Expand("memberOf") // not working
    //.Expand(u => new { u.MemberOf }) // not working
    .GetAsync()
    .Result
    .ToList();

结果,我得到了包含一些数据的用户列表,但 MemberOf 字段始终为空(尽管我 100% 确定他们至少有一个分配的组)。然而,这按预期工作:

var u = client.Users["<id>"].MemberOf.Request().GetAsync().Result;

可以肯定的是,我已授予我的应用程序完整的应用程序权限,没有任何变化。我错过了什么吗?

最佳答案

这是我的第一个回答,希望能帮到你。

您应该使用 beta 版本,因为 v1.0 没有实现“memberOf”扩展,要将 sdk 更改为 beta 版本,您必须添加:

 client.BaseUrl = "https://graph.microsoft.com/beta";

我通常使用 QueryOption 包含扩展,如下所示:

 List<QueryOption> options = new List<QueryOption> { new QueryOption("$Expand", "MemberOf") };

但是我认为你的使用方式不会有任何问题

试试这个代码:

var clientCred = new ClientCredential("<client id>",  "<secret>");
var authContext = new AuthenticationContext("https://login.windows.net/" + "<b2c tenant>");
var authResult = authContext.AcquireTokenAsync("https://graph.microsoft.com/", clientCred).Result;
        var client = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                async (requestMessage) =>
                {
                    var token = authResult.AccessToken;
                    var result = await Task.FromResult(token);

                    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
                }));
        //Change to the beta version
        client.BaseUrl = "https://graph.microsoft.com/beta";
        //Parameters of the query
         List<QueryOption> options = new List<QueryOption> { new QueryOption("$Expand", "MemberOf") };
        // query with parameters
         var users = await graphClient.Users.Request(options).GetAsync();

关于c# - Azure AD B2C 和图 : cannot list users with memberOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53617796/

相关文章:

c# - 在 C# 中非对称验证 JWT

c# - 正则表达式与 C# 中的交集匹配

c# - IEnumerable<T, int>、Arity 和通用类型定义

azure - 如何实现 ARM 模板的测试用例

c# - 并行编程竞争条件

c# - 如何在 UML 中表示 C# 属性?

c# - 如何使用 CanContentScroll tr​​ue 获取 ItemsControl 的开发独立像素中的 ScrollViewer 的 VerticalOffset

Azure 应用服务 - MVC5 WebApp 缺少 css 文件

python - x5t JWT 指纹 Python 转换

c# - 更改用户控件 ID 中的 CSS