Устранение неполадок проверки подлинности для единого входа в Teams
Ниже приведен список проблем и вопросов по единому входу, а также способы их устранения.
Поддержка Microsoft Graph
1. Работает ли API Graph в Postman?
Вы можете использовать коллекцию Microsoft Graph Postman с API Microsoft Graph.
Дополнительные сведения см. в статье Использование Postman с API Microsoft Graph.
2. Работает ли API Graph в обозревателе Microsoft Graph?
Да, API Graph работает в песочнице Microsoft Graph.
Дополнительные сведения см. в статье Песочница Graph.
Сообщения об ошибках и способы их обработки
1. Ошибка: отсутствует согласие.
Когда Microsoft Entra ID получает запрос на доступ к ресурсу Microsoft Graph, он проверяет, дал ли пользователь или администратор приложения согласие на использование этого ресурса. Если от пользователя или администратора нет записи согласия, Microsoft Entra ID отправляет сообщение об ошибке в веб-службу.
Код должен сообщить клиенту (например, в тексте ответа 403 Forbidden), как обработать ошибку:
- Если приложению вкладки требуются области Microsoft Graph, для которых только администратор может предоставить согласие, ваш код должен создать ошибку.
- Если пользователь может дать согласие только на те области, которые ему нужны, ваш код должен инициировать возврат к альтернативной системе проверки подлинности пользователя.
2. Ошибка: отсутствует область (разрешение).
Эта ошибка возникает только во время разработки.
Чтобы обработать эту ошибку, серверный код должен отправить клиенту ответ 403 Forbidden. Следует записать ошибку в консоли или журнале.
3. Ошибка: недопустимая аудитория в маркере доступа для Microsoft Graph.
Код на стороне сервера должен отправить клиенту ответ 403 Forbidden, чтобы отобразить сообщение пользователю. Рекомендуется также записать ошибку в консоль или записать ее в журнал.
4. Ошибка: имя узла не должно основываться на уже принадлежащем домене.
Эту ошибку можно получить в одном из двух сценариев:
- Личный домен не добавляется в Microsoft Entra ID. Чтобы добавить личный домен в Microsoft Entra ID и зарегистрировать его, выполните процедуру добавления имени личного домена в Microsoft Entra ID. Затем снова выполните действия, описанные в разделе Настройка область для маркера доступа.
- Вы не вошли в систему с учетными данными администратора в клиенте Microsoft 365. Войдите в Microsoft 365 в качестве администратора.
5. Ошибка: имя участника-пользователя (UPN) не получено в возвращенном маркере доступа.
В Microsoft Entra ID можно добавить имя участника-пользователя в качестве необязательного утверждения.
Дополнительные сведения см. в разделе Предоставление необязательных утверждений для приложения и Маркеры доступа.
6. Ошибка: Teams SDK Error: resourceDisabled.
Чтобы избежать этой ошибки, убедитесь, что URI идентификатора приложения правильно настроен в Microsoft Entra регистрации приложения и в клиенте Teams.
Дополнительные сведения об URI идентификатора приложения см. в разделе Предоставление API.
7. Ошибка: универсальная ошибка при запуске приложения вкладки.
Общая ошибка может отображаться, если одна или несколько конфигураций приложений, выполненных в Microsoft Entra ID, неверны. Чтобы устранить эту ошибку, проверка, если сведения о приложении, настроенные в коде, и манифест приложения (ранее называемый манифестом приложения Teams) соответствуют значениям в Microsoft Entra ID.
На следующем рисунке показан пример сведений о приложении, настроенных в Microsoft Entra ID.
Убедитесь, что между Microsoft Entra ID, клиентским кодом и манифестом приложения совпадают следующие значения:
Идентификатор приложения. Идентификатор приложения, созданный в Microsoft Entra ID, должен совпадать в коде и в файле манифеста приложения. Проверьте, соответствует ли идентификатор приложения в схеме манифеста приложения идентификатору приложения (клиента) в Microsoft Entra ID.
Секрет приложения. Секрет приложения, настроенный в серверной части приложения, должен соответствовать учетным данным клиента в Microsoft Entra ID. Также проверьте, истек ли срок действия секрета клиента.
URI идентификатора приложения. URI идентификатора приложения в коде и в файле манифеста приложения должен соответствовать URI идентификатора приложения в Microsoft Entra ID.
Разрешения приложения: проверьте, соответствуют ли разрешения, определенные в области, требованиям вашего приложения. В этом случае проверка, были ли они предоставлены пользователю в маркере доступа.
Согласие администратора: если для какой-либо области требуется согласие администратора, проверьте, предоставлено ли пользователю согласие для конкретной области.
Кроме того, проверьте маркер доступа, отправленный приложению вкладки, чтобы убедиться в правильности следующих значений.
- Аудитория (aud): проверьте, правильно ли указан идентификатор приложения в маркере, как указано в Microsoft Entra ID.
- Идентификатор клиента (tid): проверьте правильность клиента, указанного в маркере.
- Удостоверение пользователя (preferred_username): проверьте, соответствует ли удостоверение пользователя имени пользователя в запросе маркера доступа для область, к которому текущий пользователь хочет получить доступ.
- Scopes (scp): проверьте правильность область, для которой запрашивается маркер доступа, и как определено в Microsoft Entra ID.
- Microsoft Entra версии 1.0 или 2.0 (ver): проверьте правильность Microsoft Entra версии.
Для проверки маркера вы можете использовать JWT.
Ошибка маркера единого входа бота
Сбой обмена маркерами.
Если при обмене маркерами возникла ошибка, используйте следующий код:
{
"status": "<response code>",
"body":
{
"id":"<unique Id>",
"connectionName": "<connection Name on the bot (from the OAuth card)>",
"failureDetail": "<failure reason if status code is not 200, null otherwise>"
}
}
Чтобы понять поведение бота, когда обмен маркерами не запускает запрос на согласие, см. следующие действия.
Примечание.
Действия пользователя не требуются, так как бот выполняет нужные действия при сбое обмена маркерами.
Клиент начинает беседу с ботом, запуская сценарий OAuth.
Бот в ответ отправляет клиенту карточку OAuth.
Клиент перехватывает карта OAuth перед отображением его пользователю приложения. Он проверяет, содержит
TokenExchangeResource
ли он свойство.Если свойство существует, клиент отправляет боту
TokenExchangeInvokeRequest
. Клиент должен иметь обменный токен для пользователя. Этот маркер должен быть маркером Azure AD версии 2, аудитория которого должна совпадать с свойствомTokenExchangeResource.Uri
.Клиент отправляет боту действие вызова со следующим кодом:
{ "type": "Invoke", "name": "signin/tokenExchange", "value": { "id": "<any unique Id>", "connectionName": "<connection Name on the skill bot (from the OAuth card)>", "token": "<exchangeable token>" } }
Бот обрабатывает
TokenExchangeInvokeRequest
и возвращаетTokenExchangeInvokeResponse
клиенту. Клиент должен подождать, пока не получитTokenExchangeInvokeResponse
.{ "status": "<response code>", "body": { "id":"<unique Id>", "connectionName": "<connection Name on the skill bot (from the OAuth card)>", "failureDetail": "<failure reason if status code is not 200, null otherwise>" } }
Если у
TokenExchangeInvokeResponse
естьstatus
со значением200
, то клиент не показывает карточку OAuth. См. схему нормального потока. Для любого другогоstatus
или если объектTokenExchangeInvokeResponse
не получен, клиент показывает пользователю карточку OAuth. См схему потока при отработке сбоя. Если возникли ошибки или какие-либо зависимости, такие как согласие пользователя, отсутствуют, это действие гарантирует, что поток единого входа переключится на обычный поток OAuthCard.Примечание.
В веб-клиенте Teams запрос пароля не отображается, так как в браузере есть активный сеанс Microsoft Entra, который используется для проверки подлинности и получения маркера. В классическом клиенте Teams появится запрос на ввод пароля, так как у классического клиента нет Microsoft Entra сеанса, и ему предлагается войти в систему.
См. также
Рекомендации по обеспечению безопасности для свойств приложений в Microsoft Entra ID
Platform Docs