Diagnosticar e solucionar problemas de exceções não autorizadas do Azure Cosmos DB
APLICA-SE A: NoSQL
HTTP 401: A assinatura MAC encontrada na solicitação HTTP não é a mesma que a assinatura computada. Se você recebeu a mensagem de erro 401 "A assinatura MAC encontrada na solicitação HTTP não é a mesma que a assinatura computada", isso pode ser causado pelos seguintes cenários.
Para SDKs mais antigos, a exceção pode aparecer como uma exceção JSON inválida em vez da exceção 401 não autorizada correta. SDKs mais recentes lidam corretamente com esse cenário e fornecem uma mensagem de erro válida.
Passos de resolução de problemas
A lista a seguir contém causas conhecidas e soluções para exceções não autorizadas.
A chave não foi girada corretamente é o cenário mais comum
A assinatura MAC 401 é vista logo após uma rotação de chave e eventualmente para sem alterações.
Solução:
A chave foi rodada e não seguiu as melhores práticas. A rotação da chave da conta do Azure Cosmos DB pode levar de alguns segundos a possivelmente dias, dependendo do tamanho da conta do Azure Cosmos DB.
A chave está configurada incorretamente
O problema da assinatura MAC 401 será consistente e acontece para todas as chamadas que usam essa chave.
Solução:
A chave está configurada incorretamente no aplicativo e está usando a chave errada para a conta, ou a chave inteira não foi copiada.
O aplicativo está usando as chaves somente leitura para operações de gravação
O problema de assinatura MAC 401 ocorre apenas para operações de gravação como criar ou substituir, mas as solicitações de leitura são bem-sucedidas.
Solução:
Mude o aplicativo para usar uma chave de leitura/gravação para permitir que as operações sejam concluídas com êxito.
Condição de corrida com criar recipiente
O problema de assinatura MAC 401 é visto logo após a criação de um contêiner. Esse problema ocorre somente até que a criação do contêiner seja concluída.
Solução:
Há uma condição de corrida com a criação de contêineres. Uma instância de aplicativo está tentando acessar o contêiner antes que a criação do contêiner seja concluída. O cenário mais comum para essa condição de corrida é se o aplicativo estiver em execução e o contêiner for excluído e recriado com o mesmo nome. O SDK tenta usar o novo contêiner, mas a criação do contêiner ainda está em andamento, portanto, não tem as chaves.
Modo em massa ativado
Ao usar o modo em massa habilitado, as operações de leitura e gravação são otimizadas para o melhor desempenho de rede e enviadas para o back-end por meio de uma API em massa dedicada. 401 erros ao executar operações de leitura com o modo em massa ativado geralmente significam que o aplicativo está usando as chaves somente leitura.
Solução
Use as chaves de leitura/gravação ou o mecanismo de autorização com acesso de gravação ao executar operações com o modo em massa habilitado.
Próximos passos
- Diagnostique e solucione problemas ao usar o SDK .NET do Azure Cosmos DB.
- Saiba mais sobre as diretrizes de desempenho para .NET v3 e .NET v2.
- Diagnostique e solucione problemas ao usar o SDK Java v4 do Azure Cosmos DB.
- Saiba mais sobre as diretrizes de desempenho para Java v4 SDK.