Udostępnij za pośrednictwem


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 nieautoryzowanego wyjątku 401. 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 MAC 401 jest widoczny wkrótce po rotacji klucza i ostatecznie zatrzymuje się bez żadnych zmian.

Rozwiązanie 2.

Nastąpiła rotacja kluczy i nie zastosowano najlepszych rozwiązań. Rotacja klucza 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 401 MAC będzie spójny i będzie występować dla wszystkich wywołań korzystających z tego klucza.

Rozwiązanie 2.

Klucz jest nieprawidłowo skonfigurowany w aplikacji i używa nieprawidłowego klucza dla konta lub całego klucza 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 2.

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 2.

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 stanu wyścigu jest to, czy 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 korzysta z 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