Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ API Gateway/ Perguntas frequentes/ Autenticação da API/ Erros comuns relacionados às informações de autenticação do IAM
Atualizado em 2024-09-24 GMT+08:00

Erros comuns relacionados às informações de autenticação do IAM

Você pode encontrar os seguintes erros relacionados às informações de autenticação do IAM:

Incorrect IAM authentication information: verify aksk signature fail

{    
  "error_msg": "Incorrect IAM authentication information: verify aksk signature fail, ......   
  "error_code": "APIG.0301", 
  "request_id": "******" 
}

Possível causa

O algoritmo de assinatura está incorreto e a assinatura calculada pelo cliente é diferente da calculada pelo APIG.

Solução

Método 1: ver logs.

  1. Obtenha o canonicalRequest calculado pelo APIG.

    Obtenha request_id no corpo da mensagem de erro, pesquise error.log (você pode exibir esse arquivo no CLS) do nó shubao com base em request_id e obtenha canonicalRequest de error.log.
    2019/01/26 11:34:27 [error] 1211#0: *76 [lua] responses.lua:170: rewrite(): 473a4370fbaf69e42f9da243eb8f8c52;app-1;Incorrect IAM authentication information: verify signature fail;SDK-HMAC-SHA256 Access=071fe245-9cf6-4d75-822d-c29945a1e06a, SignedHeaders=host;x-sdk-date, Signature=b2ef2cddcef89cbfe22974c988909c1a94b1ac54114c30b8fe083d34a259e0f5;canonicalRequest:GET
    /app1/
    
    host:test.com
    x-sdk-date:20190126T033427Z
    
    host;x-sdk-date
    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, client: 192.168.0.1, server: shubao, request: "GET /app1 HTTP/1.1", host: "test.com"

  2. Obtenha o canonicalRequest calculado pelo cliente imprimindo logs ou usando interrupções de depuração. A tabela a seguir descreve as funções usadas para calcular o canonicalRequest nos SDKs de diferentes linguagens.

    Tabela 1 Funções para calcular canonicalRequest nos SDKs de linguagens comuns

    Linguagem

    Função

    Java

    Função Sign em com.cloud.sdk.auth.signer.DefaultSigner.class de libs/java-sdk-core-*.jar

    C

    Função sig_sign em signer.c

    C++

    Função Signer::createSignature em signer.cpp.

    C#

    Função Sign em signer.cs

    Go

    Função Sign em signer.go

    JavaScript

    Função Signer.prototype.Sign em signer.js

    Python

    Função Sign em signer.py

    PHP

    Função Sign em signer.php

    Exemplo: canonicalRequest obtido em uma interrupção de depuração

    POST 
    /app1/  
    
    host:test.com 
    x-sdk-date:20190126T033950Z  
    
    host;x-sdk-date 
    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

  3. Verifique se o cannonicalRequest em 1 é o mesmo que em 2.

    • Sim: verifique se AK e SK estão corretos, por exemplo, sem espaços.
    • Não:
      • Diferente na linha 1: o método de solicitação deve ser o mesmo.
      • Diferente na linha 2: o caminho da solicitação deve ser o mesmo.
      • Diferente na linha 3: os parâmetros de solicitação devem ser os mesmos.
      • Diferente nas linhas 4 a 5: o cabeçalho da solicitação deve ser o mesmo em cada linha.
      • Diferente na linha 7: o número de parâmetros de cabeçalho da solicitação deve ser o mesmo que o número de linhas de cabeçalho da solicitação.
      • Diferente na linha 8: o corpo da solicitação deve ser o mesmo.
    Tabela 2 canonicalRequest de APIG e um cliente

    Linha nº

    Parâmetro

    APIG

    Cliente

    1

    Request method

    GET

    POST

    2

    Request path

    /app1/

    /app1/

    3

    Request parameters

    Nenhum

    Nenhum

    4

    Request header

    host:test.com

    host:test.com

    5

    Request header

    x-sdk-date:20190126T033427Z

    x-sdk-date:20190126T033950Z

    6

    Blank line

    -

    -

    7

    Request header parameters

    host;x-sdk-date

    host;x-sdk-date

    8

    Request body hash value

    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Método 2: comparar a assinatura local com a obtida.

  1. Faça o download do SDK do JavaScript, visualize o SDK de assinatura visualizado e obtenha a assinatura.
  2. Descompacte o pacote e abra o arquivo demo.html usando um navegador.
  3. Obtenha o valor de x-sdk-date e verifique se a diferença entre esse valor e a hora atual está dentro de 15 minutos.

    1. Pressione F12 no teclado e escolha Sources > Snippets > New snippet.
    2. Copie o código a seguir para o snippet de script à direita, clique com o botão direito do mouse no nome do snippet à esquerda e selecione Run no menu de atalho. O valor exibido na guia Console é o valor de x-sdk-date.
    function twoChar(s) {
        if (s >= 10) {
            return "" + s
        } else {
            return "0" + s
        }
    }
    
    function getTime() {
        var date = new Date();
        return "" + date.getUTCFullYear() + twoChar(date.getUTCMonth() + 1) + twoChar(date.getUTCDate()) + "T" +
            twoChar(date.getUTCHours()) + twoChar(date.getUTCMinutes()) + twoChar(date.getUTCSeconds()) + "Z"
    }
    getTime()

  4. Adicione x-sdk-date aos Headers, defina outros parâmetros e clique em Debug para obter a assinatura.

    Para todas as solicitações, exceto get, delete e head, adicione um corpo na área Body usando o mesmo formato de um corpo de solicitação real.

  5. Copie o comando curl na figura de 4, execute-o em uma interface de linha de comando e vá para a próxima etapa.

    curl -X GET "http://192.168.0.1:10000/get" -H "X-Sdk-Date: 20221208T015751Z" -H "host: 192.168.0.1:10000" -H "Authorization: SDK-HMAC-SHA256 Access=6cc7e0042e1645c4bc954368d3b495a8, SignedHeaders=host;x-sdk-date, Signature=488409e25642fd03753a16238f89e35b466e93b3470160a9e894f53e79f2108a" -d $''

    Se um autorizador personalizado for usado, substitua Authorization no comando curl pelo nome do autorizador.

  6. Compare a assinatura no código local com a assinatura visualizada de JavaScript.

    Por exemplo, verifique se os valores de canonicalRequest, stringToSign e authorizationHeader no código de assinatura de Java são os mesmos que os da assinatura visualizada do JavaScript.

Incorrect IAM authentication information: AK access failed to reach the limit,forbidden

{    
  "error_msg": "Incorrect IAM authentication information: AK access failed to reach the limit,forbidden." ......   
  "error_code": "APIG.0301", 
  "request_id": "******" 
}

Possíveis causas

  • O cálculo da assinatura de AK/SK está incorreto. Resolva o problema referindo-se a Incorrect IAM authentication information: verify aksk signature fail.
  • AK e SK não coincidem.
  • A autenticação de AK/SK falha por mais de cinco vezes consecutivas e o par de AK/SK é bloqueado por cinco minutos. (As solicitações de autenticação são rejeitadas nesse período).
  • Um token expirado é usado para autenticação de token.

Incorrect IAM authentication information: decrypt token fail

{
  "error_msg": "Incorrect IAM authentication information: decrypt token fail",
  "error_code": "APIG.0301",
  "request_id": "******"
}

Possível causa

O token não pode ser analisado para autenticação do IAM da API.

Solução

  • Verifique se o token está correto.
  • Verifique se o token foi obtido no ambiente onde a API é chamada.

Incorrect IAM authentication information: Get secretKey failed

{
"error_msg": "Incorrect IAM authentication information: Get secretKey failed,ak:******,err:ak not exist",
"error_code": "APIG.0301",
"request_id": "******"
}

Possível causa

O AK usado para autenticação do IAM da API não existe.

Solução

Verifique se o AK está correto.