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


Диагностика и устранение неполадок, приводящих к исключениям отсутствия авторизации в 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, возникающие при выполнении операций чтения с включенным массовым режимом, часто означают, что приложение использует ключи только для чтения.

Решение

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

Следующие шаги