Por que as assinaturas não combinam?
Sintoma
O seguinte erro é relatado durante uma chamada de API do OBS.
Código de status: 403 Forbidden
Código de erro: SignatureDoesNotMatch
Mensagem de erro: The request signature we calculated does not match the signature you provided. Check your key and signing method.
Possíveis causas
A assinatura fornecida não corresponde à assinatura calculada pelo sistema.
Solução
- Verifique o ponto de extremidade.
Verifique o ponto de extremidade se estiver usando o SDK do OBS.
O formato correto do ponto de extremidade é obs.regionID.myhuaweicloud.com. Se o ponto de extremidade estiver definido como um nome de domínio de bucket (bucketname.obs.regionID.myhuaweicloud.com), um erro de incompatibilidade de assinatura também será relatado.
- Verifique o AK e a SK.
Certifique-se de que o AK e a SK inseridos estão corretos, para que possam corresponder aos usados na solicitação.
- Verifique HTTP-Verb.
Certifique-se de que o HTTP-Verb na assinatura é o mesmo que no pedido.
- Verifique Date e Expires.
- Assinatura em um cabeçalho: verifique se Date na assinatura é a mesma do cabeçalho da solicitação.
- Assinatura em um URL: verifique se Expires na assinatura é o mesmo que no URL da solicitação.
Se o gerador de assinatura de URL for usado, Expires será definido como um valor em segundos, por exemplo, 3600 por uma hora. O valor de Expires no URL gerado é o último ponto no tempo do período de validade.
- Verifique os cabeçalhos.
Verifique Content-MD5, Content-Type e Canonicalized Headers. Se algum deles estiver contido durante o cálculo da assinatura, eles também devem estar contidos na solicitação.
Se um URL com uma assinatura contida for usado para acessar recursos do OBS por meio de um navegador, os parâmetros de cabeçalho acima não poderão ser contidos durante o cálculo da assinatura.
- Verifique Canonicalized Resource.
Canonicalized Resource indica os recursos do OBS que são solicitados. Configure esse parâmetro com base nos requisitos da referência da API. Para obter detalhes, consulte Autenticação de assinatura em um cabeçalhoou Autenticação de assinatura em um URL.
- Verifica StringToSign.
Verifique se StringToSign é construído com base nas seguintes regras:
- Assinatura em um cabeçalho:
HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource
- Assinatura em um URL:
HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Expires + "\n" + CanonicalizedHeaders + CanonicalizedResource
Se um parâmetro for deixado em branco, coloque-o em uma nova linha.
- Assinatura em um cabeçalho:
- Verifique o cálculo da assinatura.
Verifique se a assinatura é calculada da seguinte forma:
- Construa a cadeia de caracteres StringToSign da solicitação.
- Execute a codificação UTF-8 no resultado em 1.
- Use a SK para executar o cálculo da assinatura HMAC-SHA1 no resultado em 2.
- Execute a codificação Base64 no resultado em 3. Se a assinatura estiver contida em um cabeçalho, essa etapa gerará a assinatura final e nenhuma outra ação será necessária.
- Se a assinatura estiver contida em um URL, execute a codificação do URL no resultado em 4 para obter a assinatura final.
- Verifique a assinatura consultando Autenticação de assinatura do usuário.