Todos os produtos
Search
Central de documentação

ActionTrail:Mecanismo de assinatura

Última atualização: Aug 25, 2026

Assine todas as solicitações de API para garantir a segurança. A Alibaba Cloud usa a assinatura da solicitação para verifique a identidade do chamador da API. Toda solicitação deve conter uma assinatura, independentemente do envio por HTTP ou HTTPS.

Visão geral

Adicione a assinatura à solicitação da API Resource Management no seguinte formato:

https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf

Os parâmetros são descritos a seguir:

  • SignatureMethod: método de criptografia da string de assinatura. Defina o valor como HMAC-SHA1.

  • SignatureVersion: versão do algoritmo de criptografia da assinatura. Defina o valor como 1.0.

  • SignatureNonce: número aleatório e exclusivo usado para evitar ataques de replay. Use números diferentes para cada solicitação. Recomendamos o uso de identificadores universalmente exclusivos (UUIDs).

  • Signature: string de assinatura gerada após a criptografia simétrica da solicitação com o AccessKey secret.

O algoritmo de criptografia da assinatura segue as especificações RFC 2104 HMAC-SHA1. O AccessKey secret calcula o valor do código de autenticação de mensagem baseado em hash (HMAC) da string de consulta codificada e ordenada. Esse valor serve como string de assinatura. As assinaturas incluem parâmetros específicos da operação e variam conforme os parâmetros da solicitação. As seções a seguir explicam como calcular a string de assinatura de uma solicitação.

Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )

Etapa 1: Compor e codificar a string a ser assinada

  1. Crie uma string de consulta canônica organizando os parâmetros da solicitação.

    1. Organize os parâmetros da solicitação (incluindo todos os parâmetros comuns e específicos da operação, exceto Signature) em ordem alfabética.

      Nota

      Ao usar o método GET para envie uma solicitação, esses parâmetros formam o campo de parâmetros da URL da solicitação. Eles ficam após o ponto de interrogação (?) na URI da solicitação e são conectados por e comercial (&).

    2. Codifique os nomes e valores dos parâmetros organizados na URL da solicitação usando o conjunto de caracteres UTF-8. A tabela a seguir descreve as regras de codificação.

      Caractere Regra de codificação
      Letras maiúsculas, letras minúsculas, dígitos, hifens (-), sublinhados (_), pontos (.) e tis (~) Não é necessário codificar esses caracteres.
      Outros caracteres Esses caracteres exigem codificação percentual no formato %XY. XY representa o código ASCII dos caracteres em notação hexadecimal. Por exemplo, aspas duplas (") são codificadas como %22.
      Caracteres UTF-8 estendidos A codificação desses caracteres deve seguir o formato %XY%ZA….
      Espaços Codifique espaços como %20. Não utilize sinais de mais (+) para essa finalidade.
      Esse método difere do algoritmo de codificação MIME (Multipurpose Internet Mail Extensions) application/x-www-form-urlencoded, como a classe java.net.URLEncoder da biblioteca padrão Java. No entanto, você pode aplicar o algoritmo MIME e substituir o sinal de mais (+) na string codificada por %20, o asterisco (*) por %2A e %7E pelo til (~). Use o método percentEncode a seguir para implementar o algoritmo:
      private static final String ENCODING = "UTF-8";
          private static String percentEncode(String value) throws UnsupportedEncodingException 
          {
          return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
          }
    3. Conecte os nomes e valores dos parâmetros codificados usando sinais de igual (=).

    4. Ordene os pares de nome e valor conectados na ordem especificada e una-os com e comercial (&) para obter a string de consulta canônica.

  2. Gere a string a ser assinada a partir da string de consulta canônica codificada da seguinte forma:

    StringToSign=
          HTTPMethod + "&" +
          percentEncode("/") + "&" +
          percentEncode(CanonicalizedQueryString)

    Os parâmetros são descritos abaixo:

    • HTTPMethod: indica o método HTTP usado para envie a solicitação, como GET.

    • percentEncode("/"): especifica o valor codificado (%2F) de uma barra (/), seguindo as regras de codificação de URL.

    • percentEncode(CanonicalizedQueryString): defina a string de consulta canônica codificada conforme as regras de codificação de URL.

Etapa 2: Calcular a string de assinatura

  1. Calcule o valor HMAC da string a ser assinada conforme a RFC 2104.

    Nota

    Use o algoritmo SHA1 para calcular o valor HMAC da string a ser assinada. A chave para o cálculo do HMAC é a combinação do seu AccessKey secret com um e comercial (&) (código ASCII 38).

  2. Codifique o valor HMAC em Base64 para obter a string de assinatura.

  3. Inclua a string de assinatura na solicitação como o parâmetro Signature.

    Nota

    Ao envie o valor da assinatura obtido como valor final do parâmetro da solicitação, codifique-o na URL assim como os demais parâmetros, seguindo as regras definidas na

    RFC 3986

    .

Exemplo

Este exemplo usa uma solicitação CreateTrail. A URL da solicitação antes da assinatura é:

https://actiontrail.cn-hangzhou.aliyuncs.com/?AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04

A StringToSign correspondente é:

POST&%2F&AccessKeyId%3Dtestid%26Action%3DCreateTrail%26Format%3DJSON%26Name%3Dtest%26RegionId%3Dcn-hangzhou%26RoleName%3DAliyunServiceRoleForActionTrail%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dd7730860-e66f-11ea-a3a5-d5f3b52e66a1%26SignatureVersion%3D1.0%26Timestamp%3D2020-08-25T01%25253A11%25253A01Z%26Version%3D2017-12-04

Por exemplo, se o AccessKey ID for testid e o AccessKey secret for testsecret, a chave usada para calcular o HMAC será testsecret&.

A assinatura calculada é: d15sJSZ0cc+y6a6FHlWxGK/qcUA=.

A URL da solicitação assinada fica assim:

https://actiontrail.cn-hangzhou.aliyuncs.com/?Signature=d15sJSZ0cc+y6a6FHlWxGK/qcUA=&AccessKeyId=testid&Action=CreateTrail&Format=JSON&Name=test&RegionId=cn-hangzhou&RoleName=AliyunServiceRoleForActionTrail&SignatureMethod=HMAC-SHA1&SignatureNonce=d7730860-e66f-11ea-a3a5-d5f3b52e66a1&SignatureVersion=1.0&Timestamp=2020-08-25T01%3A11%3A01Z&Version=2017-12-04