Диагностика и устранение неполадок, приводящих к исключениям отсутствия авторизации в Azure Cosmos DB

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

HTTP 401: The MAC signature found in the HTTP request is not the same as the computed signature (Подпись MAC в HTTP-запросе отличается от вычисляемой подписи). Вывод сообщения об ошибке 401 ("Подпись MAC в HTTP-запросе отличается от вычисляемой подписи") может быть вызван следующими обстоятельствами.

В старых пакетах SDK это исключение может неверно сообщать о недопустимом формате JSON, а не об отсутствии авторизации (код 401). Все новые пакеты SDK правильно обрабатывают этот сценарий и возвращают допустимое сообщение об ошибке.

Действия по устранению неполадок

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

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

Ошибка с кодом 401 и сообщением о подписи MAC появляется сразу после смены ключа и затем исчезает сама.

Решение:

Смена ключа была выполнена с нарушением рекомендаций. Смена ключа учетной записи Azure Cosmos DB может занимать от нескольких секунд до нескольких дней в зависимости от размера учетной записи.

Ключ настроен неправильно

Ошибка с кодом 401 и сообщением о подписи MAC в этом случае будет возникать постоянно при каждом вызове с проблемным ключом.

Решение:

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

Приложение использует для операций записи ключи с разрешениями только на чтение

Ошибка с кодом 401 и сообщением о подписи MAC возникает только для операций записи, таких как CREATE или REPLACE, но запросы на чтение выполняются успешно.

Решение:

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

Состояние гонки при создании контейнера

Ошибка с кодом 401 и сообщением о подписи MAC возникает сразу после создания контейнера. Такая проблема проявляется только до тех пор, пока не завершится создание контейнера.

Решение:

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

Массовый режим включен

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

Решение

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

Дальнейшие действия