检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
用通过API网关开放的云服务API,提供签名流程与实现逻辑,以及Java、Go、Python、C等多种不同语言的签名SDK和调用示例。 部分云服务开放的API,不通过API网关,签名认证流程请先参考云服务自身提供的API参考手册。 各云服务API参考手册中的“如何调用API”章节,介绍了认证方法。
API调用是否支持长连接 API网关支持长连接。 注意适当使用,避免占用太多资源。 父主题: 常见问题
子项目场景下怎么调用API 子项目场景下调用API: 如果您的资源在子项目中,调用云服务API时需要增加一个请求消息头参数X-Project-Id,参数值填您的项目ID。 参数X-Project-Id相关操作请参见签名SDK与demo。 父主题: 常见问题
到您的API所在分组。请检查API所在的分组域名,例如您有多个API分组,每个分组有自己的独立域名,API调用时,使用了其他分组的独立域名。 检查API是否使用OPTIONS跨域请求,如果使用OPTIONS跨域请求,请在API中开启CORS,并创建OPTIONS方式的API。具体操作请参考开启跨域共享。
access the API. 403 APP不允许访问API 检查APP是否授权访问API APIGW.0305 Incorrect authentication information. 401 认证信息错误 检查认证信息是否正确 APIGW.0306 API access denied
常见问题 子项目场景下怎么调用API API调用是否支持长连接 Body体是否可以不参与签名 请求消息头参数是否可以不参与签名 使用临时AK/SK做签名 IAM认证信息错误 APP认证信息错误 "The API does not exist or has not been published
计算签名时,URI必须以“/”结尾。发送请求时,可以不以“/”结尾。 添加规范查询字符串(CanonicalQueryString),以换行符结束。 释义: 查询字符串,即查询参数。如果没有查询参数,则为空字符串,即规范后的请求为空行。 格式: 规范查询字符串需要满足以下内容: 根据以下规则对每个参数名和值进行URI编码:
"error_code": "APIGW.0303", "request_id": "a5322eb89048eb41d705491a76a05aca" } 可能原因 appkey配置错误。 解决方法 在API网关控制台页面的左侧导航栏中选择“API管理 > 凭据管理”。 单击对应的凭据名称,进入凭据详情。
获取账号名和账号ID 在调用接口的时候,部分URL中需要填入账号名和账号ID,所以需要先在管理控制台上获取到账号名和账号ID。账号名和账号ID获取步骤如下: 登录控制台。 将鼠标移至页面右上角的用户名处,在下拉列表中单击“我的凭证”。 查看账号名和账号ID。 图1 查看账号名和账号ID 父主题:
将待发送的请求内容按照与API网关后台约定的规则组装,确保客户端签名、API网关后台认证时使用的请求内容一致。 使用规范请求和其他信息创建待签字符串。 使用AK/SK和待签字符串计算签名。 将生成的签名信息作为请求消息头添加到HTTP请求中,或者作为查询字符串参数添加到HTTP请求中。
"error_code": "APIGW.0301", "request_id": "******" } 可能原因 签名认证算法使用有问题,客户端计算的签名结果与API网关计算的签名结果不同。 解决方法 下载js版本,查看可视化签名SDK,获取签名字符串。 解压压缩包,使用浏览器打开“demo
创建成功后,在“创建成功”弹窗中,单击“立即下载”下载密钥,并妥善保管。 您可以在访问密钥列表中查看访问密钥ID(AK),在下载的.csv文件中查看访问密钥(SK)。 获取临时AK/SK,请参考IAM接口文档。 请及时下载保存,弹窗关闭后将无法再次获取该密钥信息,但您可重新创建新的密钥。
获取项目ID 在调用接口的时候,部分URL中需要填入项目编号,获取token时,同样需要获取项目编号,所以需要先在管理控制台上获取到项目编号。项目编号获取步骤如下: 登录控制台。 将鼠标移至页面右上角的用户名处,在下拉列表中单击“我的凭证”,查看“项目ID”。 项目用于对云服务器
AK/SK签名认证算法详解 AK/SK签名认证流程 构造规范请求 创建待签字符串 计算签名 添加签名信息到请求头
AK/SK签名认证操作指导 AK/SK签名认证操作流程 获取EndPoint 获取AK/SK 获取项目ID 获取账号名和账号ID 签名SDK与demo
"xxx"); 进行签名,执行此函数会将生成的签名头加入request变量中。 1 sig_sign(¶ms); 使用curl库访问API,查看访问结果。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
完成工程创建后,目录结构如下。 图3 新建工程go的目录结构 “demo.go”为示例代码,请根据实际情况修改参数后使用。具体代码说明请参考请求签名与API调用。 请求签名与API调用 在工程中引入sdk(signer.go)。 import "./core" 生成一个新的Signer,分别输入AK和SK值。
进行签名,执行此函数会将生成的签名头加入request变量中。 1 signer.createSignature(request); 使用curl库访问API,查看访问结果。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
然后使用临时AK/SK对请求进行签名,签名SDK与AK/SK的签名SDK一致。 创建一个API,安全认证选择“华为IAM认证”,并发布。 获取当前账号的临时AK/SK与{securityToken},请参考IAM接口文档。 例如获得响应参数为: { "credential": {
'xxx', ); 进行签名,执行此函数会生成一个$curl上下文变量。 1 $curl = $signer->Sign($req); 访问API,查看访问结果。 1 2 3 4 $response = curl_exec($curl); echo curl_getinfo($curl