Устранение неполадок проверки подлинности для единого входа в 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 получает запрос на доступ к ресурсу Microsoft Graph, он проверяет, дал ли пользователь приложения или администратор клиента согласие для этого ресурса. Если у пользователя или администратора нет записи согласия, идентификатор Microsoft Entra отправляет сообщение об ошибке в веб-службу.

Код должен сообщить клиенту (например, в тексте ответа 403 Forbidden), как обработать ошибку:

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

2. Ошибка: отсутствует область (разрешение).
Эта ошибка возникает только во время разработки.

Чтобы обработать эту ошибку, серверный код должен отправить клиенту ответ 403 Forbidden. Следует записать ошибку в консоли или журнале.


3. Ошибка: недопустимая аудитория в маркере доступа для Microsoft Graph.
Код на стороне сервера должен отправить клиенту ответ 403 Forbidden, чтобы отобразить сообщение пользователю. Рекомендуется также записать ошибку в консоль или записать ее в журнал.

4. Ошибка: имя узла не должно основываться на уже принадлежащем домене.
Эту ошибку можно получить в одном из двух сценариев:
  1. Личный домен не добавляется в идентификатор Microsoft Entra. Чтобы добавить личный домен в Идентификатор Microsoft Entra и зарегистрировать его, выполните процедуру добавления личного доменного имени в идентификатор Microsoft Entra ID. Затем снова выполните действия, описанные в разделе Настройка области для маркера доступа .
  2. Вы не вошли в систему с учетными данными администратора в клиенте Microsoft 365. Войдите в Microsoft 365 в качестве администратора.

5. Ошибка: имя участника-пользователя (UPN) не получено в возвращенном маркере доступа.
Имя участника-пользователя можно добавить в качестве необязательного утверждения в идентификаторе Microsoft Entra.

Дополнительные сведения см. в разделе Предоставление необязательных утверждений для приложения и Маркеры доступа.


6. Ошибка: Teams SDK Error: resourceDisabled.
Чтобы избежать этой ошибки, убедитесь, что URI идентификатора приложения правильно настроен в регистрации приложения Microsoft Entra и в клиенте Teams.

Дополнительные сведения об URI идентификатора приложения см. в разделе Предоставление API.


7. Ошибка: универсальная ошибка при запуске приложения вкладки.
Общая ошибка может возникать, если одна или несколько конфигураций приложений, выполненных в идентификаторе Microsoft Entra, неверны. Чтобы устранить эту ошибку, проверьте, соответствуют ли сведения о приложении, настроенные в коде, и манифест приложения (ранее называемый манифестом приложения Teams) значениям в идентификаторе Microsoft Entra.

На следующем рисунке показан пример сведений о приложении, настроенных в идентификаторе Microsoft Entra.

Значения конфигурации приложения в идентификаторе Microsoft Entra

Убедитесь, что следующие значения совпадают между идентификатором Microsoft Entra, клиентским кодом и манифестом приложения:

  • Идентификатор приложения. Идентификатор приложения, созданный в Microsoft Entra ID, должен совпадать в коде и в файле манифеста приложения. Проверьте, соответствует ли идентификатор приложения в схеме манифеста приложения идентификатору приложения (клиента) в Идентификаторе Microsoft Entra.

  • Секрет приложения. Секрет приложения, настроенный во внутренней части приложения, должен соответствовать учетным данным клиента в идентификаторе Microsoft Entra. Также проверьте, истек ли срок действия секрета клиента.

  • URI идентификатора приложения. URI идентификатора приложения в коде и в файле манифеста приложения должен соответствовать URI идентификатора приложения в Microsoft Entra ID.

  • Разрешения приложения: проверьте, соответствуют ли разрешения, определенные в области, требованиям вашего приложения. В этом случае проверьте, были ли они предоставлены пользователю в маркере доступа.

  • Согласие администратора: если для какой-либо области требуется согласие администратора, проверьте, предоставлено ли пользователю согласие для конкретной области.

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

  • Аудитория (aud): проверьте, правильно ли указан идентификатор приложения в маркере, как указано в идентификаторе Microsoft Entra.
  • Идентификатор клиента (tid): проверьте правильность клиента, указанного в маркере.
  • Удостоверение пользователя (preferred_username): проверьте, соответствует ли удостоверение пользователя имени пользователя в запросе маркера доступа области, к которому текущий пользователь хочет получить доступ.
  • Scopes (scp): проверьте правильность области, для которой запрашивается маркер доступа, и как определено в идентификаторе Microsoft Entra.
  • 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>" 
    }​​ 
}​​

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

Примечание.

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

  1. Клиент начинает беседу с ботом, запуская сценарий OAuth.

  2. Бот в ответ отправляет клиенту карточку OAuth.

  3. Клиент перехватывает карточку OAuth перед отображением ее пользователю приложения. Он проверяет, содержит TokenExchangeResource ли он свойство.

  4. Если свойство существует, клиент отправляет боту TokenExchangeInvokeRequest. Клиент должен иметь обменный токен для пользователя. Этот маркер должен быть маркером Azure AD версии 2, аудитория которого должна совпадать с свойством TokenExchangeResource.Uri .

  5. Клиент отправляет боту действие вызова со следующим кодом:

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": 
        {
            "id": "<any unique Id>",
            "connectionName": "<connection Name on the skill bot (from the OAuth card)>",
            "token": "<exchangeable token>"
        }
    }
    
  6. Бот обрабатывает 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>"
        }
    }
    
  7. Если у TokenExchangeInvokeResponse есть status со значением 200, то клиент не показывает карточку OAuth. См. схему нормального потока. Для любого другого status или если объект TokenExchangeInvokeResponse не получен, клиент показывает пользователю карточку OAuth. См схему потока при отработке сбоя. Если возникли ошибки или какие-либо зависимости, такие как согласие пользователя, отсутствуют, это действие гарантирует, что поток единого входа переключится на обычный поток OAuthCard.

    Примечание.

    В веб-клиенте Teams запрос пароля не отображается, так как в браузере есть активный сеанс Microsoft Entra, который используется для проверки подлинности и получения маркера. В классическом клиенте Teams появится запрос пароля, так как в классическом клиенте нет сеанса Microsoft Entra для общего доступа, и ему предлагается войти в систему.

См. также

Рекомендации по обеспечению безопасности для свойств приложений в Идентификаторе Microsoft Entra