【问题标题】:Microsoft Graph Toolkit no have result match for some of the Azure AD usersMicrosoft Graph Toolkit 对于某些 Azure AD 用户没有结果匹配
【发布时间】:2021-03-11 04:18:32
【问题描述】:

最近在尝试使用 mgt people picker 搜索具有以下标记的我的租户 Azure AD 用户时发现了一些奇怪的情况。

<mgt-people-picker type="any" transitive-search="true"></mgt-people-picker>

以下是使用的信息摘要:

a) 单租户,不允许使用个人 Microsoft 帐户。

b) 所有 API 权限要求均在应用程序和应用程序注册中授予。

            "User.Read",
            "User.ReadBasic.All",
            "People.Read",
            "People.Read.All",
            "Contacts.Read",
            "Directory.Read.All",
            "User.Read.All",
            "Member.Read.Hidden",
            "Domain.Read.All",
            "User.ReadWrite.All",
            "APIConnectors.Read.All"

c) 已获得管理员同意。 d) 我正在使用 api/proxy 进行连接。

不知何故,我只能找到一些用户,一些用户没有找到。在 mgt people picker UI 中,我只需输入三到四个字符或完整的电子邮件地址即可搜索,但返回结果不正确。我发现当它返回不正确的结果时,它在检索照片值时出错。示例错误如下

我曾尝试使用Graph Explorer 对其进行测试。显然,它也无法返回正确的结果匹配。但只有使用以下查询测试,它才能将正确的用户返回给我。但是当使用 mgt people picker 时,它不能。任何建议都非常感谢。我只是猜测它与 Azure AD 用户配置文件设置有关,或者与我的应用程序配置或其他有关。希望能给我一些线索来解决这个问题。供您参考,我拥有访问组织 Azure 环境中所有资源的所有管理员权限。如果有我遗漏的信息,请告诉我,我将编辑帖子以包含它。

https://graph.microsoft.com/v1.0/users/<email address>

使用Graph Explorer作为参考测试结果,仅返回部分(大多数不返回):

【问题讨论】:

  • 当你说“我已经尝试使用 Graph Explorer 来测试它。显然,它也无法返回正确的结果匹配。”,你如何测试它?在 Graph explorer 中调用哪个端点?
  • 在我的帖子中所述的 Graph Explorer 中使用此查询 url "graph.microsoft.com/v1.0/me/people?$search=shu" 来查看 Graph Explorer 下的响应预览。其中不显示返回的相关用户配置文件(基本)。我已编辑帖子以包含我使用 Graph Explorer 所做的图像
  • 我用你的&lt;mgt-people-picker type="any" transitive-search="true"&gt;&lt;/mgt-people-picker&gt;从我这边测试,发现实际调用的是https://graph.microsoft.com/v1.0/me/people?$search="shu"&amp;$top=6&amp;$filter=personType/class eq 'Person'。它有$top=6,这意味着只返回前6个项目。它还有一个过滤器$filter=personType/class eq 'Person'。所以请使用这个调用在 Microsoft Graph 资源管理器中进行测试,看看结果是否一致。
  • https://graph.microsoft.com/v1.0/users?$count=true&amp;$search="displayName:ang"&amp;$filter=startsWith(displayname,'ang')&amp;$orderBy=displayName&amp;$select=id,displayName,mail 当我尝试使用上面的查询 url/endpoint 进行搜索时,它将显示正确的结果。这里的问题:我如何确保 mgt-people-picker 触发正确的端点到我的 api/proxy?
  • 另外,你说https://graph.microsoft.com/v1.0/me/people?$search=shu 没有返回足够的结果给你。我认为这可能是因为您没有正确理解 API。此 API 检索按与用户的相关性排序的人员对象集合,这由用户的通信和协作模式以及业务关系决定。在此处查看详细信息:docs.microsoft.com/en-us/graph/api/…。如果有帮助,请告诉我。

标签: azure azure-active-directory microsoft-graph-api microsoft-graph-sdks


【解决方案1】:

为了解决 /me/people 端点无法显示相关搜索结果的问题。我在我的 api/proxy 中进行了以下代码更改,以在将请求发送到 MS Graph 之前拦截该过程,如下所示。这可能是使其正常工作的解决方法。将来,如果有更好的选择,我会对其进行更改。 希望这可以帮助遇到与我相同问题的人。

var url = $"{GetBaseUrlWithoutVersion(_graphClient)}/{all}{qs.ToUriComponent()}";

            if(url.StartsWith("https://graph.microsoft.com/v1.0/me/people?$search="))
            {
                string url2 = @"https://graph.microsoft.com/v1.0/users?$count=true&$filter=startsWith(displayname,%27{0}%27) or startsWith(userPrincipalName,%27{1}%27)";

                Uri searchUri = new Uri(url);
                string paramSearch = HttpUtility.ParseQueryString(searchUri.Query).Get("$search").Replace('"', ' ').Trim();

//we do not want to search for any email address, just for custom search only
                if(!string.IsNullOrEmpty(paramSearch) && !paramSearch.Contains("@xxx"))
                {
                    url = string.Format(url2, paramSearch, paramSearch);
                }                
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多