Diagnosticar e solucionar problemas com 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 é igual à assinatura computada. Se você recebeu a mensagem de erro 401: "A assinatura MAC encontrada na solicitação HTTP não é igual à assinatura computada", isso pode ser ocorrer nos cenários a seguir.
Para SDKs mais antigos, a exceção pode aparecer como uma exceção JSON inválida em vez da exceção não autorizada 401 correta. Os SDKs mais recentes lidam corretamente com esse cenário e apresentam uma mensagem de erro válida.
Etapas para solucionar problemas
A lista a seguir contém causas conhecidas e soluções para exceções não autorizadas.
O cenário mais comum é que a chave não tenha sido rotacionada corretamente
A assinatura MAC 401 é vista logo após uma rotação de chave e por fim é interrompida sem alterações.
Solução:
A chave foi rotacionada e não seguia as melhores práticas. A rotação de chave de conta do Azure Cosmos DB pode levar desde alguns segundos a alguns dias, dependendo do tamanho da conta do Azure Cosmos DB.
A chave está configurada incorretamente
O problema com a assinatura MAC 401 será constante e acontecerá em todas as chamadas que usam a chave.
Solução:
A chave está configurada incorretamente no aplicativo e está usando a chave incorreta para a conta, ou a chave inteira não foi copiada.
O aplicativo está usando chaves somente leitura para operações de gravação
O problema com a assinatura MAC 401 ocorre apenas para operações de gravação como criar ou substituir, mas solicitações de leitura são bem-sucedidas.
Solução:
Alterne 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 ao criar contêiner
O problema com a 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êiner. Uma instância do aplicativo está tentando acessar o contêiner antes que a criação dele seja concluída. O cenário mais comum para essa condição de corrida ocorre quando o aplicativo está em execução e o contêiner é 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, de modo que ele não tem as chaves.
Modo em massa habilitado
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. Erros 401 ao executar operações de leitura com o Modo em massa habilitado, 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óximas etapas
- Diagnosticar e solucionar problemas ao usar o SDK do .NET para o Azure Cosmos DB.
- Saiba mais sobre as diretrizes de desempenho para o .NET v3 e o .NET v2.
- Diagnosticar e solucionar problemas ao usar o SDK do Java v4 para o Azure Cosmos DB.
- Saiba mais sobre as diretrizes de desempenho para o SDK do Java v4.