【问题标题】:Azure B2C Tenant and Graph API, user managementAzure B2C 租户和图形 API,用户管理
【发布时间】:2021-06-27 05:49:38
【问题描述】:

这是关于我们使用 Azure B2C 租户进行身份验证的应用程序。需要获取支持过滤、分页的用户列表,并且用户必须来自特定的 TenantId。我们正在使用 Graph API SDK,即 microsoft.graph 和 microsoft.graph.Auth 包。

我已经完成的步骤

  1. 使用带有 TenantId 的 ClientCredentialProvider 创建图形客户端。
  2. 使用以下代码获取用户
var users = await graphClient.Users
.Request()
.Top(100)
.Filter("identities/any(c:c/issuer eq 'contoso.onmicrosoft.com')")
.Select("displayName,id,identities")
.GetAsync();

这将获取给定颁发者或租户的所有用户。现在,有一个问题我无法使用此选项.Filter("identities/any(c:c/issuer eq 'contoso.onmicrosoft.com') and startswith(displayName,'a') 过滤用户,即,获取显示名称以“a”开头且属于此颁发者“contoso.onmicrosoft.com”的所有用户。根据 Microsoft,Graph API 目前不支持对身份的复杂查询。他们显示这条消息Message: Complex query on property identities is not supported.

现在,我的想法仅限于将此租户的整个用户表加载到内存中的选项。我认为这不是最好的方法,因为我们会有更多的租户,我不知道我们可以在内存中存储多少用户。

任何对这类场景有更多了解的人,请分享您的意见。我想知道我们可以采取的其他各种替代方案。

【问题讨论】:

标签: azure azure-active-directory azure-ad-b2c microsoft-graph-sdks


【解决方案1】:

正如消息所说,“不支持对属性标识的复杂查询”,Microsoft Graph SDK 也不支持它。在 C# 中只能使用String.StartsWith() 方法检查用户。

var users = await graphClient.Users
    .Request()
    .Top(100)
    .Filter("identities/any(c:c/issuer eq 'contoso.onmicrosoft.com')")
    .Select("displayName,id,identities")
    .GetAsync();

List<User> userResult = new List<User>();
foreach(var user in users)
{
     
    if (user.displayName.StartsWith(a)) {
         
        userResult.add(user);
    }
}

【讨论】:

  • 这种用 StartsWith 的过滤方式我们可以做到。我更关心提高检索和存储用户列表的性能。对此有何建议?
  • 如果您有足够多的用户,这会花费大量时间,这个link 显示了添加 List 和另一个 link 以改进循环的性能。最好在 C# 和性能标签中提出问题。
  • 感谢帕梅拉的帮助和回复。我会评估它,看看它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多