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
-
Crie uma string de consulta canônica organizando os parâmetros da solicitação.
-
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.
NotaAo 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 (&).
-
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.XYrepresenta 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 classejava.net.URLEncoderda 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%2Ae%7Epelo til (~). Use o métodopercentEncodea 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; } Conecte os nomes e valores dos parâmetros codificados usando sinais de igual (=).
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.
-
-
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
-
Calcule o valor HMAC da string a ser assinada conforme a RFC 2104.
NotaUse 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).
Codifique o valor HMAC em Base64 para obter a string de assinatura.
-
Inclua a string de assinatura na solicitação como o parâmetro Signature.
NotaAo 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
.
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