Поделиться через


Известные проблемы в Microsoft Graph

Проверка подлинности

На странице согласия показано, что приложение командной строки, которое обслуживает PowerShell и CLI, от непроверенного издателя.

Обходной путь

Чтобы удалить непроверенное сообщение, можно выполнить собственную регистрацию приложения, в которой можно настроить себя в качестве проверенного издателя. Необходимо пройти процесс проверки издателя и использовать идентификатор приложения в пакете SDK Microsoft Graph PowerShell следующим образом:

Connect-MgGraph -AppId "{your-own-app-id}" -Scopes "scope"

При определенных обстоятельствах предварительное согласие для приложений поставщика облачных решений (CSP) может не работать для некоторых клиентов.

После первого входа в приложение, использующее делегированные разрешения, в новом клиенте может возникнуть эта ошибка: AADSTS50000: There was an error issuing a token.

Приложение, использующее разрешения для приложений, может получить маркер, но ему может быть неожиданно отказано в доступе при вызове Microsoft Graph.

Мы работаем над устранением этой проблемы, чтобы предварительная версия работала для всех клиентов CSP.

Обходной путь

Чтобы разблокировать разработку и тестирование, можно использовать следующее обходное решение.

Примечание.

Это решение не является постоянным и предназначено только для разблокировки разработки. Это обходное решение не потребуется после устранения проблемы. Это решение не требуется устранять после того, как исправление будет включено.

  1. Откройте сеанс PowerShell Azure AD версии 2 и подключитесь к клиенту клиента, введя учетные данные администратора в окне входа. Скачать и установить Azure AD PowerShell версии 2 можно здесь.

    Connect-AzureAd -TenantId {customerTenantIdOrDomainName}
    
  2. Создайте субъект-службу Microsoft Graph.

    New-AzureADServicePrincipal -AppId 00000003-0000-0000-c000-000000000000
    

Конечная точка Azure AD версии 2.0 не поддерживается для приложений CSP

Приложения поставщика облачных решений (CSP) должны получать маркеры из конечных точек Azure AD (версии 1) для успешного вызова Microsoft Graph у клиентов, управляемых партнером. В настоящее время получение маркера через более новую конечную точку Azure AD версии 2.0 не поддерживается.

Календарь

Ошибка при прикреплении больших файлов к событиям

Приложение с делегированными разрешениями возвращает HTTP 403 Forbidden при попытке присоединить большие файлы к сообщению Outlook или событию, которое находится в общем или делегированном почтовом ящике. С делегированными разрешениями createUploadSession завершается успешно, только если сообщение или событие находятся в почтовом ящике вошедшего в систему пользователя.

Уведомления об изменениях

События обновления для уведомлений об изменении установки приложений Teams в чате область не доставляются

При создании подписки на уведомление об изменении установки приложения Teams, если область относится к чатам или включает их, события и уведомления об обновлении не доставляются подписчику.

Например, если клиент подписывается /appCatalogs/teamsApps/{teams-app-id}/installations?$filter=(scopeInfo/scope eq 'groupChat')на , он не будет получать уведомления о событиях обновления и обновления. Однако они получают другие уведомления об установке и удалении.

Другой пример: если клиент подписывается /appCatalogs/teamsApps/{teams-app-id}/installationsна , он не будет получать уведомления о событиях обновления и обновления, происходящих специально в чатах. Однако они получают все другие формы уведомлений в командах и в личных область пользователей. Но в чатах они получают только уведомления об установке и удалении.

Обходной путь

В настоящее время обходной путь для этой проблемы недоступен.

Резервирование для пользователей

Ошибка при запросе bookingBusinesses

Получение списка bookingBusinesses завершается ошибкой со следующим кодом ошибки, если организация имеет несколько предприятий Bookings и учетная запись, выполняя запрос, не является администратором:

{
  "error": {
    "code": "ErrorExceededFindCountLimit",
    "message": "The GetBookingMailboxes request returned too many results. Please specify a query to limit the results."
  }
}

Обходной путь

Вы можете ограничить набор предприятий, возвращаемых запросом, включив параметр запроса, например:

GET https://graph.microsoft.com/beta/bookingBusinesses?query=Fabrikam

Разностный запрос

Контекст OData возвращается неправильно

При отслеживании изменений в отношениях иногда неправильно возвращается контекст OData.

Управление устройствами и приложениями

Доступ к аудиториям развертывания и их обновление не поддерживаются

Доступ к аудиториям развертывания и их обновление для ресурсов deployment, созданных с помощь Intune, в настоящее время не поддерживается.

  • Перечисление членов аудитории развертывания и перечисление исключений из аудитории развертывания возвращает 404 Not Found.
  • Обновление состава и исключений из аудитории развертывания или обновление по идентификатору возвращает 202 Accepted, но аудитория не обновляется.

Группы

Неадминовый пользователь не может добавить себя в качестве владельца группы во время создания или обновления группы

Когда пользователь без администратора вызывает API создания группы , API группы обновления или API группы Upsert и добавляет свой идентификатор пользователя в текст запроса в owners@odata.bind коллекции, запрос завершается ошибкой 400 Bad Request с кодом ошибки с сообщением "Запрос содержит свойство с повторяющимися значениями". Пользователь, не являющийся администратором, не может явно добавить себя в качестве владельца группы.

Обходной путь

Обходной путь для этой ошибки не существует.

По умолчанию пользователь, не являющийся администратором, создающий группу безопасности или Microsoft 365 с помощью API создания группы или API группы Upsert , автоматически добавляется в коллекцию владельцев группы, если они не указывают владельцев группы. Если в качестве владельцев группы указаны другие пользователи, создатель группы, не являющегося администратором, по-прежнему автоматически добавляется в коллекцию владельцев группы безопасности, но не для группы Microsoft 365. Пользователь по-прежнему не может добавить себя в коллекцию владельцев во время обновления группы.

GET /groups/{id}/members не возвращает субъекты-службы в версии 1.0

Операция API перечисления членов группы в конечной точке версии 1.0 в настоящее время не возвращает субъектов-служб, которые могут быть членами запрашиваемой группы.

Обходной путь

В качестве обходного решения используйте один из следующих вариантов:

Удостоверение и доступ

Использование определенных параметров запроса в /subscribedSkus и /domains не возвращает ожидаемые результаты.

Следующее использование параметров запроса, предназначенных для объектов subscribedSkus и доменов , может не возвращать ожидаемые результаты:

  • Использование для обоих подписанныхskus$search или доменных сущностей
  • $top Использование и $filter в сущности домена

В настоящее время эти параметры фактически игнорируются, а запросы не возвращают ожидаемые результаты.

Обходной путь

Чтобы предотвратить любые нарушения бизнес-процессов, рекомендуется изменить код приложения, чтобы исключить использование этих параметров запроса из запросов, предназначенных для сущностей подпискиSkus или доменов , и запустить поиск, сверху и фильтр на стороне клиента.

Для настройки федеративных доменов в делегированных сценариях требуется разрешение Directory.AccessAsUser.All

В разделах Create internalDomainFederation, Update internalDomainFederation и Delete internalDomainFederation может потребоваться предоставить согласие на разрешение Directory.AccessAsUser.All . Это требование является временным обходным решением, пока мы не предоставим более детализированное делегированное разрешение для управления федеративными доменами.

API claimsMappingPolicy может требовать согласия на разрешения Policy.Read.All и Policy.ReadWrite.ConditionalAccess для методов LIST /policies/claimsMappingPolicies и GET /policies/claimsMappingPolicies/{id} следующим образом:

  • Если в операции LIST нет объектов claimsMappingPolicy для получения, для вызова этого метода достаточно любого разрешения.
  • Если есть объекты claimsMappingPolicy для получения, приложение должно предоставить согласие на оба разрешения. В противном случае возвращается ошибка 403 Forbidden.

В будущем для вызова обоих методов будет достаточно любого разрешения.

API conditionalAccessPolicy в настоящее время требует согласия на разрешение Policy.Read.All для вызова методов POST и PATCH. В дальнейшем разрешение Policy.ReadWrite.ConditionalAccess позволит читать политики из каталога.

Пакетная обработка JSON

Зависимость запросов ограничена

Отдельные запросы могут зависеть от других отдельных запросов. В настоящее время запросы могут зависеть только от одного другого запроса и должны соответствовать одному из следующих трех шаблонов:

  • Parallel — отдельный запрос не указывает зависимость в свойстве dependsOn .
  • Последовательный — все отдельные запросы зависят от предыдущего отдельного запроса.
  • То же самое — все отдельные запросы, указывающие зависимость в свойстве dependsOn , обналичают одну и ту же зависимость. Примечание. Запросы, созданные с помощью этого шаблона, будут запускаться последовательно.

После усовершенствования пакетной обработки JSON эти ограничения будут удалены.

Почта

Разностные вызовы API сообщений с использованием неизменяемых идентификаторов

При выполнении /delta вызовов API сообщений с использованием неизменяемых идентификаторов в некоторых случаях (например, когда сообщение выходит из папки и затем перемещается обратно), вы можете пропустить некоторые уведомления об изменениях.

Параметр комментария для создания черновика не является частью текста сообщения.

Параметр комментария для создания черновика ответа или пересылки (createReply, createReplyAll, createForward) не является частью текста черновика сообщения ответа.

Параметры запроса

$search для объектов каталога завершается ошибкой для символа закодированного амперсанда (&)

Согласно стандарту RFC 3986 и описано в разделе Кодирование параметров запроса, зарезервированные символы в строках запроса должны быть закодированы в процентах. Например, синтаксис для $search имени группы, например "Походы&отдых", выглядит следующим образом:

GET https://graph.microsoft.com/v1.0/groups?$search="displayName:Hiking%26Recreation group"

В настоящее время Microsoft Graph возвращает код ошибки в конечной 400 Bad Request точке версии 1.0 при поиске, который включает символы закодированного амперсанда (&) со следующим сообщением об ошибке: Unrecognized query argument specified: ''.. Тот же запрос выполняется успешно в бета-версии конечной точки.

В некоторых приложениях реализовано двухпроцентное кодирование в конечной точке версии 1.0 в качестве обходного решения. Например, двухпроцентный запрос становится /users?$search="displayName:Hiking%2526Recreation group". Однако это не является официально рекомендуемой обходной путь.

Обходной путь

Обходное решение 1.

В конечной точке версии 1.0 при использовании правильной кодировки процентов добавьте Prefer заголовок запроса с значением legacySearch=false. Например, вы можете:

GET https://graph.microsoft.com/v1.0/groups?$search="displayName:Hiking%26Recreation group"
ConsistencyLevel: eventual
Prefer: legacySearch=false

В будущем поведение конечной точки версии 1.0 будет исправлено, и вам не нужно будет включать этот заголовок.

Обходной путь 2.

Если поведение конечной точки версии 1.0 исправлено, приложения с зависимостью от двупроцентной кодировки могут столкнуться с критическими изменениями, если они не согласились поддерживать свою реализацию, включив Prefer в заголовок запроса значение legacySearch=true. Например, вы можете:

GET https://graph.microsoft.com/v1.0/groups?$search="displayName:Hiking%2526Recreation group"
ConsistencyLevel: eventual
Prefer: legacySearch=true

Некоторые ограничения применяются к параметрам запроса

К параметрам запроса применяются следующие ограничения:

  • Несколько пространств имен не поддерживаются.
  • Запросы GET для $ref и приведения не поддерживаются для пользователей, групп, устройств, субъектов-служб и приложений.
  • @odata.bind не поддерживается. Это означает, что вы не можете правильно задать свойство навигации acceptedSenders или rejectedSenders в группе.
  • @odata.id отсутствует в навигациях без использования (например, в сообщениях) при использовании минимальных метаданных.
  • $expand о связях объектов каталога:
    • Возвращает не более 20 объектов, за исключением /users?$expand=registeredDevices, который возвращает до 100 объектов.
    • Отсутствует поддержка @odata.nextLink.
    • Поддерживается не более одного уровня развертывания.
    • Не поддерживает вложение других параметров запроса, таких как $filter и $select внутри $expand запроса.
  • $filter:
    • /attachments конечная точка не поддерживает фильтры. При ее наличии параметр $filter игнорируется.
    • Фильтрация между рабочими нагрузками не поддерживается.
    • При использовании in оператора запрос по умолчанию ограничен 15 выражениями в предложении фильтра или URL-адрес длиной 2048 символов при использовании расширенных возможностей запроса.
    • При фильтрации с помощью eq оператора максимальное ограничение соответствующего значения составляет 120 символов. То есть . $filter=displayName eq 'value-to-match-max-120-char' Это ограничение применяется даже к таким свойствам, как displayName для объектов каталога, которые могут содержать до 256 символов. При использовании расширенных запросов ограничение применяется к длине URL-адреса в 2048 символов вместо совпадающего значения.
  • $search:
    • Полнотекстовый поиск доступен только для некоторых объектов, например сообщений.
    • Поиск между рабочими нагрузками не поддерживается.
    • Поиск не поддерживается в клиентах Azure AD B2C.
  • $count:
    • Не поддерживается в клиентах Azure AD B2C.
    • При использовании $count=true строки запроса при запросе к ресурсам @odata.count каталога свойство присутствует только на первой странице страничных данных.
  • Указанные в запросе параметры могут просто не сработать. Это может быть верно для неподдерживаемых параметров запроса и для неподдерживаемых сочетаний параметров запроса.

Создание externalConnection с неработаемым адаптивным карта возвращает ответ 503 Service Unavailable, за которым следует ошибка 409 Conflict

При использовании API Microsoft Graph для создания внешнего подключения с неработаным адаптивным карта для макета результата первый вызов завершается ошибкой503 Service Unavailable. Затем второй вызов завершается ошибкой 409 Conflict , указывающей на то, что подключение с таким же именем уже существует.

Хотя первый запрос завершился сбоем с ответом 503, подключение по-прежнему было создано. Однако шаблон адаптивного карта не зарегистрирован, так как он не работает.

Сайты и списки

Отслеживание и отмена подписки на сайты не синхронизированы со следующими сайтами SharePoint

При запросе сайтов, отслеживаемых с помощью Microsoft Graph, ответ может иметь неверные результаты и эти результаты могут не соответствовать результатам из следующего содержимого в SharePoint.

Обходной путь

Используйте rest API для пользователей и содержимого .

Командная работа и коммуникации

Перечисление participant_v2 callRecords может не возвращать всех участников

В некоторых пограничных случаях запрос на перечисление participants_v2 для callRecord может возвращать неполный список.

Обходной путь

Для полного списка участников можно использовать существующее свойство участника callRecord .

Пакет SDK для вызовов для связи: несогласованный записанный номер участника отображается в клиенте teams при включенной группировке ботов

При записи приложений ботов включает группирование ботов, количество участников, отображаемое клиентом Teams как записываемые, не является точным. Так как участники группируются, отображаемое число записываемых участников меньше фактического числа.

Обходной путь

Отключите группирование ботов для отображения точного подсчета.

API callRecords представляет участников приложения как пользователей в communicationsIdentitySet

В ресурсе участника callRecord участники приложения или бота в настоящее время представлены communicationsUserIdentity вместо communicationsApplicationIdentity.

Обходной путь

Используйте заголовок агента пользователяValue в ресурсе participantEndpoint в сеансе callRecord , чтобы определить участников приложения и просмотреть дополнительные сведения об удостоверении приложения.

Пакет SDK для вызовов связи: отсутствует поддержка варианта использования нескольких конечных точек в режиме уведомлений разностного списка

Если одно и то же приложение или пользователь присоединяется к одному собранию с помощью нескольких конечных точек, а режим уведомления о реестре является разностным, обновления списка участников, предоставляемые пакетом SDK для коммуникаций, могут не записывать дополнительные конечные точки, добавленные в текущий вызов.

Обходной путь

Устаревший режим для реестра поддерживает вариант использования с несколькими конечными точками. Используйте пакет SDK версии 1.2.0.7270 или более ранней.

Пакет SDK для вызовов связи: исключение обработки сообщений веб-перехватчика: System.Security.Cryptography.CryptographicException

В выпуске KB появилась проблема с приложениями, разработанными с помощью пакетов SDK для вызовов связи.

Метод Microsoft Graph AnswerAsync создает исключение, когда бот пытается ответить на входящие вызовы. Это связано со следующими обновлениями Windows:

  • Wk22 — KB5038282
  • Wk19 - KB5038283

Дополнительные сведения см. в статье SHA256 ComputeHash started throwing — Microsoft Community.

Обходной путь

Откат базы знаний в ожидании обновленного выпуска пакета SDK.

Запросы на отслеживание изменений для API- интерфейсов, которые экспортируют артефакты собраний по сети, возвращают элементы, которые уже синхронизированы

Запросы отслеживания изменений (/delta) для getAllTranscripts или getAllRecordings могут возвращать элементы, которые уже синхронизированы в предыдущих запросах.

Это происходит, когда на собрании были другие не связанные обновления, такие как добавление участников, заметок или файлов.

Обходной путь

Для каждого элемента в ответе проверка createdDateTime записи или расшифровки и сравните его с предыдущей меткой времени синхронизации. Если createdDateTime находится до последней метки времени синхронизации, элемент уже синхронизирован и может быть проигнорирован.

API- интерфейсы, экспортирующие артефакты собраний по сети, не возвращают записи для собраний без включения транскрибирования

API getAllRecordings не возвращает записи для собраний, для которых не включена транскрибирование.

При вызове API getAllRecordings или getAllTranscripts передача $top фильтра может не возвращать @odata.nextLink, даже если экспортируемых элементов больше.

Обходной путь

Не передайте $top параметр запроса, пока проблема не будет устранена.

Сбой API перечисления участников команды с ошибкой 401 в только что созданных клиентах

Когда созданный клиент отправляет список участников запроса команды с помощью расширенных возможностей Azure AD запросов, возникает ошибка HTTP 401.

Обходной путь

  1. Вызовите API групп по списку и подождите несколько секунд.
  2. Вызов /teams/{id}/members и проверка для успешного ответа.

Метод clone team не включает всех владельцев исходной команды в клонированную команду.

При вызове метода клонирования команды , если исходная команда содержит несколько владельцев, в клонированных командах сохраняется только один владелец. Другие владельцы становятся членами новой клонированной команды. Невозможно выбрать или настроить, какой владелец будет сохранен в качестве владельца новой команды.

Обходной путь

Используйте метод Добавить участников после клонирования команды, чтобы обновить исходных владельцев от участников обратно к владельцам.

Создание канала может возвращать ответ об ошибке

При создании канала, если в имени канала используются специальные символы, API Get filesFolder вернет ответ об ошибке 400 Bad Request . При создании канала убедитесь, что displayName для канала не выполняет следующие действия:

  • Включите любой из следующих специальных символов: ~ # % & * { } + / \ : < > ? | ' ".
  • Начните с символа подчеркивания (_) или точки (.) или заканчивайте точкой (.).

Невозможно получить доступ к общему каналу между арендаторами, когда URL-адрес запроса содержит tenants/{cross-tenant-id}

API вызывает и teams/{team-id}/allChannels возвращает @odata.id свойство, которое можно использовать для teams/{team-id}/incomingChannels доступа к каналу и выполнения других операций с объектом канала. При вызове URL-адреса, возвращенного из @odata.id свойства, запрос завершается ошибкой со следующей ошибкой при попытке получить доступ к общему каналу между клиентами:

GET /tenants/{tenant-id}/teams/{team-id}/channels/{channel-id}
{
    "error": {
        "code": "BadRequest",
        "message": "TenantId in the optional tenants/{tenantId} segment should match the tenantId(tid) in the token used to call Graph.",
        "innerError": {
            "date": "2022-03-08T07:33:50",
            "request-id": "dff19596-b5b2-421d-97d3-8d4b023263f3",
            "client-request-id": "32ee2cbd-27f8-2441-e3be-477dbe0cedfa"
        }
    }
}

Обходной путь

Удалите часть /tenants/{tenant-id} из URL-адреса перед вызовом API для доступа к общему каналу между клиентами.

В запросах на фильтрацию участников групп по ролям необходимо указывать один параметр

Все запросы на фильтрацию участников команды по ролям ожидают либо параметр skipToken , либо верхний параметр в запросе, но не оба. Если в запросе будут переданы оба параметра, параметр top будет проигнорирован.

Не удается отфильтровать участников команды по ролям

Фильтры запросов ролей, а также другие фильтры GET /teams/team-id/members?$filter=roles/any(r:r eq 'owner') and displayName eq 'dummy' могут не работать. Сервер может вернуть BAD REQUEST.

Меню "Просмотр сведений о собрании" недоступно в клиенте Microsoft Teams

Клиент Microsoft Teams не отображает меню Просмотреть сведения о собрании для собраний канала, созданных с помощью API облачных коммуникаций.

Метка конфиденциальности не отображается в пользовательском интерфейсе Teams

Метки конфиденциальности, которые иногда применяются к Teams, не отображаются в пользовательском интерфейсе Teams, несмотря на то, что они хорошо видны как на базовом сайте SharePoint, так и в центре Администратор.

Некоторые свойства для участников чата могут отсутствовать в ответе на запрос GET

В некоторых случаях свойство tenantId/email/displayName для отдельных участников чата может не заполняться в запросе GET /chats/chat-id/members или GET /chats/chat-id/members/membership-id .

Обновление лимита чатов для участников развертывания

Этот API работает по-разному в одном или нескольких национальных облаках. Дополнительные сведения см. в разделе Различия в реализации в национальных облаках. При $expand=members включении этот API возвращает не более 25 элементов, даже если указано большее $top значение.

Свойство layoutType возвращается null при перечислении всех каналов

В текущем бета-выпуске свойство layoutType возвращается null при перечислении всех каналов.

Пользователи

API- интерфейсы, экспортируемые артефакты собраний по сети, могут возвращать URL-адреса расшифровки, не содержащие содержимого

API getAllTranscripts может возвращать URL-адреса содержимого расшифровки для некоторых собраний, в которых нет транскрибированных слов. Вызовы по URL-адресу содержимого для этих собраний возвращают ошибку.

Обходной путь

Убедитесь, что собрание было транскрибировано и есть ли допустимое содержимое. Если есть, сообщите об этом для дальнейшего изучения. В противном случае проигнорируйте URL-адрес содержимого.

Свойство showInAddressList не синхронизировано с Microsoft Exchange

При запросе пользователей через Microsoft Graph свойство showInAddressList может не указывать то же состояние, которое отображается в Microsoft Exchange. Рекомендуется управлять этой функцией непосредственно с помощью Microsoft Exchange через Центр администрирования Microsoft 365 и не использовать это свойство в Microsoft Graph.

Доступ к фотографии профиля пользователя ограничен

Просмотреть и обновить фотографию профиля пользователя можно, только если у пользователя есть почтовый ящик. Если в таком случае не удастся прочитать или изменить фотографию, возникнет следующая ошибка:

{
  "error": {
    "code": "ErrorNonExistentMailbox",
    "message": "The SMTP address has no mailbox associated with it."
  }
}

Все фотографии, которые ранее могли храниться с помощью свойства thumbnailPhoto (с помощью Azure AD API Graph (в настоящее время в цикле прекращения использования) или с помощью синхронизации AD Connect), больше не доступны через свойство фотографии Microsoft Graph пользовательского ресурса.

Управление фотографиями пользователей с помощью ресурса profilePhoto microsoft API Graph в настоящее время не поддерживается в клиентах Azure AD B2C.