Diagnozowanie i rozwiązywanie problemów z nieautoryzowanymi wyjątkami w usłudze Azure Cosmos DB

DOTYCZY: NoSQL

HTTP 401: Podpis MAC znaleziony w żądaniu HTTP nie jest taki sam jak obliczony podpis. Jeśli został wyświetlony komunikat o błędzie 401 "Podpis MAC znaleziony w żądaniu HTTP nie jest taki sam jak obliczony podpis", może to być spowodowane przez następujące scenariusze.

W przypadku starszych zestawów SDK wyjątek może być wyświetlany jako nieprawidłowy wyjątek JSON zamiast poprawnego wyjątku 401 brak autoryzacji. Nowsze zestawy SDK prawidłowo obsługują ten scenariusz i dają prawidłowy komunikat o błędzie.

Kroki rozwiązywania problemów

Poniższa lista zawiera znane przyczyny i rozwiązania dotyczące nieautoryzowanych wyjątków.

Klucz nie został prawidłowo obrócony, jest najbardziej typowym scenariuszem

Podpis 401 MAC jest widoczny wkrótce po rotacji kluczy i ostatecznie zatrzymuje się bez żadnych zmian.

Rozwiązanie:

Nastąpiła rotacja kluczy i nie zastosowano najlepszych rozwiązań. Rotacja kluczy konta usługi Azure Cosmos DB może potrwać od kilku sekund do kilku dni w zależności od rozmiaru konta usługi Azure Cosmos DB.

Klucz jest nieprawidłowo skonfigurowany

Problem z podpisem MAC 401 będzie spójny i będzie występować dla wszystkich wywołań używających tego klucza.

Rozwiązanie:

Klucz jest nieprawidłowo skonfigurowany w aplikacji i używa nieprawidłowego klucza dla konta lub cały klucz nie został skopiowany.

Aplikacja używa kluczy tylko do odczytu na potrzeby operacji zapisu

Problem z podpisem MAC 401 występuje tylko w przypadku operacji zapisu, takich jak tworzenie lub zastępowanie, ale żądania odczytu kończą się powodzeniem.

Rozwiązanie:

Przełącz aplikację tak, aby korzystała z klucza odczytu/zapisu, aby umożliwić pomyślne ukończenie operacji.

Warunek wyścigu z kontenerem tworzenia

Problem z podpisem MAC 401 jest widoczny wkrótce po utworzeniu kontenera. Ten problem występuje tylko do momentu ukończenia tworzenia kontenera.

Rozwiązanie:

Istnieje warunek wyścigu z tworzeniem kontenera. Wystąpienie aplikacji próbuje uzyskać dostęp do kontenera przed ukończeniem tworzenia kontenera. Najczęstszym scenariuszem dla tego warunku wyścigu jest sytuacja, gdy aplikacja jest uruchomiona, a kontener zostanie usunięty i utworzony ponownie o tej samej nazwie. Zestaw SDK próbuje użyć nowego kontenera, ale tworzenie kontenera jest nadal w toku, więc nie ma kluczy.

Tryb zbiorczy włączony

W przypadku korzystania z trybu zbiorczego operacje odczytu i zapisu są zoptymalizowane pod kątem najlepszej wydajności sieci i wysyłane do zaplecza za pośrednictwem dedykowanego interfejsu API zbiorczego. Błędy 401 podczas wykonywania operacji odczytu z włączonym trybem zbiorczym często oznaczają, że aplikacja używa kluczy tylko do odczytu.

Rozwiązanie

Użyj kluczy odczytu/zapisu lub mechanizmu autoryzacji z dostępem do zapisu podczas wykonywania operacji z włączonym trybem zbiorczym.

Następne kroki