Диагностика и устранение неполадок, приводящих к исключениям отсутствия авторизации в 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, возникающие при выполнении операций чтения с включенным массовым режимом, часто означают, что приложение использует ключи только для чтения.
Решение
При выполнении операций с включенным массовым режимом следует использовать ключи для чтения и записи или механизм авторизации с доступом для записи.
Дальнейшие действия
- Диагностика и устранение неполадок, возникающих при использовании пакета SDK Azure Cosmos DB для .NET.
- Рекомендации по обеспечению производительности для .NET версии 3 и .NET версии 2.
- Диагностика и устранение неполадок при использовании пакета SDK Azure Cosmos DB для Java v4.
- Знакомство с рекомендациями по производительности для пакета SDK для Java v4.