首页 > 解决方案 > Microsoft Graph Toolkit 没有与某些 Azure AD 用户匹配的结果

问题描述

最近在尝试使用 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作为参考测试结果,仅返回部分(大多数不返回): 在此处输入图像描述

标签: azureazure-active-directorymicrosoft-graph-apimicrosoft-graph-sdks

解决方案


为了解决 /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);
                }                
            }

推荐阅读