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
- Diagnozowanie i rozwiązywanie problemów podczas korzystania z zestawu .NET SDK usługi Azure Cosmos DB.
- Dowiedz się więcej o wytycznych dotyczących wydajności platformy .NET w wersji 3 i .NET w wersji 2.
- Diagnozowanie i rozwiązywanie problemów podczas korzystania z zestawu JAVA SDK usługi Azure Cosmos DB w wersji 4.
- Dowiedz się więcej na temat wytycznych dotyczących wydajności zestawu Java v4 SDK.