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


Устраните неполадки с вашим пользовательским расширением проверки подлинности

События проверки подлинности и настраиваемые поставщики утверждений позволяют настроить интерфейс проверки подлинности Microsoft Entra, интегрируясь с внешними системами. Например, можно создать API поставщика пользовательских утверждений и настроить приложение OpenID Connect или приложение SAML для получения маркеров с утверждениями из внешнего хранилища.

Действия при ошибке

При сбое вызова API поведение ошибки выглядит следующим образом:

  • Для приложений OpenId Connect — Microsoft Entra ID перенаправляет пользователя обратно в клиентское приложение с ошибкой. Токен не выпущен.
  • Для приложений SAML идентификатор Microsoft Entra показывает пользователю экран ошибки в процессе аутентификации. Пользователь не перенаправляется обратно в клиентское приложение.

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

Ведение журнала

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

Журналы входов Microsoft Entra

Кроме того, вы можете использовать журналы входа в Microsoft Entra помимо журналов REST API и диагностическим решениям среды размещения. С помощью журналов входа в систему Microsoft Entra можно найти ошибки, которые могут повлиять на процесс входа пользователей. Журналы входа Microsoft Entra содержат сведения о состоянии HTTP, коде ошибки, времени выполнения и количестве повторных попыток, возникающих при вызове API идентификатором Microsoft Entra.

Журналы входа Microsoft Entra также интегрируются с Azure Monitor. Вы можете настроить оповещения и мониторинг, визуализировать данные и интегрировать с средствами управления сведениями о безопасности и событиями (SIEM). Например, можно настроить уведомления, если количество ошибок превышает определенное пороговое значение.

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

  1. Войдите в Центр администрирования Microsoft Entra в роли Администратора облачных приложений или выше.

  2. Перейдите к Identity>Applications>Enterprise applications.

  3. Выберите журналы входа и выберите последний журнал входа.

  4. Дополнительные сведения см. на вкладке "События проверки подлинности". Отображаются сведения, связанные с вызовом REST API пользовательского расширения проверки подлинности, включая коды ошибок.

    Снимок экрана: сведения о событиях проверки подлинности.

Справочник по кодам ошибок

Используйте следующую таблицу для диагностики кода ошибки.

Код ошибки Название ошибки Описание
1003000 НеожиданнаяОшибкаОбработчикаСобытий При обработке обработчика событий произошла непредвиденная ошибка.
1003001 Неожиданная ошибка пользовательского расширения При вызове пользовательского API расширения произошла непредвиденная ошибка.
1003002 Неверный HTTP-статус пользовательского расширения API пользовательского расширения вернул недопустимый код состояния HTTP. Убедитесь, что API возвращает принятый код состояния, определенный для этого пользовательского типа расширения.
1003003 Неверное тело ответа пользовательского расширения Возникла проблема с анализом текста ответа настраиваемого расширения. Убедитесь, что текст ответа API находится в приемлемой схеме для этого пользовательского типа расширения.
1003004 CustomExtensionThrottlingError Слишком много запросов на пользовательское расширение. Это исключение возникает для вызовов API пользовательских расширений при достижении ограничений регулирования.
1003005 Пользовательское расширение: время ожидания истекло Пользовательское расширение не ответило в течение допустимого времени ожидания. Убедитесь, что API отвечает в течение настроенного времени ожидания для настраиваемого расширения. Он также может означать, что токен доступа недействителен. Выполните действия, чтобы напрямую вызвать REST API.
1003006 НедопустимыйТипКонтентаОтветаПользовательскогоРасширения Тип содержимого ответа пользовательского расширения не "application/json".
1003007 CustomExtensionNullClaimsResponse API пользовательского расширения ответил с помощью пакета утверждений NULL.
1003008 CustomExtensionInvalidResponseApiSchemaVersion API пользовательского расширения не ответил на тот же apiSchemaVersion, для который он был вызван.
1003009 CustomExtensionEmptyResponse Тело ответа API пользовательского расширения было нулевым, что не было ожидаемым.
1003010 НедопустимоеКоличествоДействийПользовательскогоРасширения Ответ API пользовательского расширения включал несколько действий, отличных от тех, которые поддерживаются для этого пользовательского типа расширения.
1003011 Пользовательское расширение не найдено Не удалось найти пользовательское расширение, связанное с прослушивателем событий.
1003012 НеверныйТипДействияДополненияПользователя Пользовательское расширение вернуло недопустимый тип действия, определенный для этого типа пользовательского расширения.
1003014 Ошибка формата идентификатора ресурса CustomExtension Свойство identifierUris в манифесте регистрации приложения для пользовательского расширения должно быть в формате "api://{полное доменное имя}/{appid}.
1003015 НазваниеДоменaПользовательскогоРасширенияНеСовпадает targetUrl и resourceId пользовательского расширения должны иметь одинаковое полное доменное имя.
1003016 Основной объект службы CustomExtensionResource не найден Идентификатор приложения (appId) ресурса пользовательского расширения (resourceId) должен соответствовать реальной учётной записи службы в клиенте (tenant).
1003017 Служебный объект клиента пользовательского расширения не найден Основной объект службы для пользовательского расширения ресурсов не найден в арендаторе.
1003018 СлужбаКлиентаПользовательскогоРасширенияОтключена Главный объект службы ресурса пользовательского расширения отключен в этом клиенте.
1003019 CustomExtensionResourceСервисПринципалОтключен Субъект-служба ресурсов пользовательского расширения отключена в этом клиенте.
1003020 Неверный формат целевого URL-адреса в пользовательском расширении Целевой URL-адрес находится в неправильном формате. Он должен быть допустимым URL-адресом, начинающимся с https.
1003021 Разрешение на пользовательское расширение не предоставлено для объекта службы Субъект-служба не имеет согласия администратора для роли приложения CustomAuthenticationExtensions.Receive.Payload (также известного как разрешение на приложение), которое требуется для получения http-запросов пользовательского расширения проверки подлинности.
1003022 Пользовательское расширение или основной объект службы MS Graph отключен или не найден Субъект-служба MS Graph отключен или не найден в этом клиенте.
1003023 Пользовательское расширение заблокировано Конечная точка, используемая для настраиваемого расширения, блокируется службой.
1003024 РазмерНастраиваемогоРасширенияПревышен Размер ответа на пользовательское расширение превысил максимальный предел.
1003025 Превышен размер утверждений пользовательского расширения Общий размер утверждений в ответе пользовательского расширения превысил максимальное ограничение.
1003026 СпециальнаяРасширениеПустойИлиОтсутствующийКлючДляТребованияНеПоддерживается API пользовательского расширения ответил утверждениями с NULL-значением или пустым ключом.
1003027 Ошибка соединения с настраиваемым расширением Ошибка при подключении к пользовательскому API расширения.

Вызов REST API напрямую

REST API защищен токеном доступа Microsoft Entra. Вы можете протестировать API по;

  • Получение маркера доступа с регистрацией приложения, связанной с пользовательскими расширениями аутентификации
  • Тестирование API локально с помощью средства тестирования API.
  1. Для локальных целей разработки и тестирования откройте local.settings.json и замените код следующим кодом JSON:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "",
        "AzureWebJobsSecretStorageType": "files",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "AuthenticationEvents__BypassTokenValidation" : false
      }
    }
    

    Примечание.

    Если вы использовали пакет NuGet Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents , обязательно установите "AuthenticationEvents__BypassTokenValidation" : true для локальных целей тестирования.

  2. Используя предпочитаемое средство тестирования API, создайте новый HTTP-запрос и задайте для метода HTTP значение POST.

  3. Используйте следующий JSON-текст, который имитирует запрос Microsoft Entra ID, отправляемый в ваш REST API.

    {
        "type": "microsoft.graph.authenticationEvent.tokenIssuanceStart",
        "source": "/tenants/aaaabbbb-0000-cccc-1111-dddd2222eeee/applications/00001111-aaaa-2222-bbbb-3333cccc4444",
        "data": {
            "@odata.type": "microsoft.graph.onTokenIssuanceStartCalloutData",
            "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
            "authenticationEventListenerId": "11112222-bbbb-3333-cccc-4444dddd5555",
            "customAuthenticationExtensionId": "22223333-cccc-4444-dddd-5555eeee6666",
            "authenticationContext": {
                "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
                "client": {
                    "ip": "127.0.0.1",
                    "locale": "en-us",
                    "market": "en-us"
                },
                "protocol": "OAUTH2.0",
                "clientServicePrincipal": {
                    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
                    "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                    "appDisplayName": "My Test application",
                    "displayName": "My Test application"
                },
                "resourceServicePrincipal": {
                    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
                    "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                    "appDisplayName": "My Test application",
                    "displayName": "My Test application"
                },
                "user": {
                    "companyName": "Casey Jensen",
                    "createdDateTime": "2023-08-16T00:00:00Z",
                    "displayName": "Casey Jensen",
                    "givenName": "Casey",
                    "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
                    "mail": "casey@contoso.com",
                    "onPremisesSamAccountName": "Casey Jensen",
                    "onPremisesSecurityIdentifier": "<Enter Security Identifier>",
                    "onPremisesUserPrincipalName": "Casey Jensen",
                    "preferredLanguage": "en-us",
                    "surname": "Jensen",
                    "userPrincipalName": "casey@contoso.com",
                    "userType": "Member"
                }
            }
        }
    }
    

    Совет

    Если вы используете маркер доступа, полученный из идентификатора Microsoft Entra, выберите "Авторизация", а затем выберите маркер носителя, а затем вставьте маркер доступа, полученный от идентификатора Microsoft Entra.

  4. Выберите "Отправить", и вы должны получить ответ JSON, аналогичный следующему:

    {
        "data": {
            "@odata.type": "microsoft.graph.onTokenIssuanceStartResponseData",
            "actions": [
                {
                    "@odata.type": "microsoft.graph.tokenIssuanceStart.provideClaimsForToken",
                    "claims": {
                        "customClaim1": "customClaimValue1",
                        "customClaim2": [
                            "customClaimString1",
                            "customClaimString2" 
                        ]
                    }
                }
    
            ]
        }
    }
    

Распространенные улучшения производительности

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

  1. Если API обращается к любым нижестоящим API, кэшируйте маркер доступа, используемый для вызова этих API, поэтому новый маркер не должен быть получен при каждом выполнении.
  2. Проблемы с производительностью часто связаны с подчиненными службами. Добавьте ведение журнала, которое записывает время процесса вызова любых нисходящих служб.
  3. Если вы используете облачного провайдера для размещения вашего API, используйте план хостинга, который поддерживает API в непрерывной готовности. Для Функции Azure это может быть план "Премиум" или "Выделенный".
  4. Запустите автоматические тесты интеграции для проверки подлинности. Вы также можете использовать средства тестирования API для тестирования производительности API.

См. также