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