Partilhar via


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