更新时间:2024-06-20 GMT+08:00

IAM认证信息错误

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": "******" 
}

可能原因

签名认证算法使用有问题,客户端计算的签名结果与API网关计算的签名结果不同。

解决方法

  1. 下载js版本,查看可视化签名SDK,获取签名字符串。
  2. 解压压缩包,使用浏览器打开“demo.html”文件。
  3. 获取x-sdk-date值,x-sdk-date值必须与当前时间相差在15min以内。

    1. 在键盘中按下“F12”,并在页面中选择“Sources > Snippets > New snippet”。
    2. 将以下代码复制到右侧的Script snippet中,然后在左侧右键Script snippet名称,选择“Run”后,“Console”中打印的值就是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. 将x-sdk-date添加到Headers中,并填写其余参数,单击“debug”获取签名字符串。

    非get\delete\head请求,需要携带body体,需要在上图Body框中添加body(格式与发送请求的body一致)。

  5. 复制4图中的curl命令,在cmd命令行中执行,curl命令执行后再进行下一步。

    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 $''

    如果自定义authorization,则需要把curl命令里面的Authorization替换为自定义名称。

  6. 比较本地代码中签名结果与js可视化签名结果。

    例如排查java语言签名代码中的canonicalRequeststringToSignauthorizationHeader值,与js可视化签名字符串是否一致。

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": "******" 
}

可能原因

Incorrect IAM authentication information: decrypt token fail

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

可能原因

用户的API所属IAM认证,TOKEN解析失败。

解决办法

  • 检查获取的token是否为对应IAM账号下的token。
  • 检查获取token的方法,token是否正确。
  • 检查获取token的环境与调用的环境是否一致。

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": "******"
}

可能原因

用户的API所属IAM认证,使用AK/SK签名方式访问,但是AK不存在。

解决方法

检查AK填写是否正确。