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


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

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

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

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

Сообщение о подписи MAC с кодом 401 наблюдается вскоре после смены ключа и в конечном итоге исчезает без каких-либо изменений.

Решение.

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

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

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

Решение.

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

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

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

Решение.

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

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

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

Решение.

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

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

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

Решение

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

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