认证鉴权
调用接口仅支持一种认证鉴权方式。
- AK/SK认证:通过AK(Access Key ID)/SK(Secret Access Key)加密调用请求。
AK/SK认证
AK/SK既可以使用永久访问密钥中的AK/SK,也可以使用临时访问密钥中的AK/SK,区别是临时访问密钥需要额外携带“X-Security-Token”Http Header头。
AK/SK签名认证方式仅支持消息体大小12M以内。
AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。
- AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。
- SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。
使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见:API签名指南。
签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。
如果上述提供的签名SDK中没有你需要的开发语言,您可以基于API的签名认证机制,自己实现请求的签名。
签名示例
以下结合一个Java Demo来介绍如何对一个请求进行签名,并通过HTTP Client发送一个HTTPS请求的过程。如果您不使用Demo工程,也可以直接下载API网关签名工具在其他工程中引用。
- 生成AK/SK。如果已生成过AK/SK,则可跳过此步骤,找到原来已下载的AK/SK文件,文件名一般为:credentials.csv。
- 登录管理控制台,鼠标移动至右上方的用户名,在下拉列表中选择“我的凭证”。
- 在左侧导航栏单击“访问密钥”,然后在页面中单击“新增访问密钥”。
- 在“新增访问密钥”弹窗的最下方,勾选理解上述建议的选项,然后单击“下一步”。
- 单击“确定”,访问密钥创建成功。
- 在为账号用户创建访问密钥时,还需要进行身份验证,输入对应的验证码。
- 如果开启了操作保护,在为IAM用户创建访问密钥时,也需要进行身份验证,输入对应的验证码。
- 单击“立即下载”,把访问密钥下载到本地。
为防止访问密钥泄露,建议您将其保存到安全的位置。
- 把AK/SK设置为环境变量。
本示例以Linux系统的操作为例,在本地环境将1中获取的AK/SK设置为环境变量
- 打开终端,执行以下命令编辑环境变量配置文件。
vi ~/.bashrc
- 在文件中添加如下环境变量配置,然后保存文件并退出编辑器。
export HUAWEICLOUD_SDK_AK="已获取的AK值" export HUAWEICLOUD_SDK_SK="已获取的SK值"
- 执行以下命令使配置文件生效。
source ~/.bashrc
- 打开终端,执行以下命令编辑环境变量配置文件。
- 获取示例代码,并解压缩。
- 打开IDEA,在菜单栏选择“File > New > Project from Existing Sources”。
- 在“Import Project”页面,选择“Import project from external model”。

- IDEA支持在当前窗口或新窗口创建工程。此处,在弹窗中单击“New Window”。
- 配置maven的settings.xml。
- 在profiles节点中添加如下内容:
<profile> <id>MyProfile</id> <repositories> <repository> <id>HuaweiCloudSDK</id> <url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>HuaweiCloudSDK</id> <url>https://mirrors.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> - 在mirrors节点中增加:
<mirror> <id>huaweicloud</id> <mirrorOf>*,!HuaweiCloudSDK</mirrorOf> <url>https://repo.huaweicloud.com/repository/maven/</url> </mirror> - 增加activeProfiles标签激活配置:
<activeProfiles> <activeProfile>MyProfile</activeProfile> </activeProfiles>
- 在profiles节点中添加如下内容:
- 下载Maven依赖,选择“pom.xml”并右键选择“Maven > Reload project”。
- 打开Eclipse,在菜单栏选择“File > Import”,弹出“Import”对话框,选择“General > Existing Projects into Workspace”,选择解压后的“APIGW-java-sdk-x.x.x”文件夹。

- 单击“Finish”,完成导入。导入后的示例工程如下所示。
- 修改HttpClientDemo.java文件,把API信息和已设置的环境变量替换到对应位置。
public class HttpClientDemo { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientDemo.class); public static void main(String[] args) throws Exception { // Create a new request. Request httpClientRequest = new Request(); try { // HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK需替换为前面步骤中设置的环境变量值 httpClientRequest.setKey(System.getenv("HUAWEICLOUD_SDK_AK")); httpClientRequest.setSecret(System.getenv("HUAWEICLOUD_SDK_SK")); // 设置API的请求方法 httpClientRequest.setMethod("POST"); // 设置API的请求路径,格式为https://{Endpoint}/{URI} httpClientRequest.setUrl("put your request url here"); httpClientRequest.addHeader("Content-Type", "text/plain"); // 设置API的请求Body体 httpClientRequest.setBody("put your request body here"); } catch (Exception e) { LOGGER.error(e.getMessage()); return; } CloseableHttpClient client = null; try { // 对请求进行签名 HttpRequestBase signedRequest = Client.sign(httpClientRequest, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256); if (Constant.DO_VERIFY) { // 创建httpClient并验证SSL证书 HostName.setUrlHostName(httpClientRequest.getHost()); client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClientWithVerify(Constant.INTERNATIONAL_PROTOCOL); } else { // 创建httpClient但不验证SSL证书 client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClient(Constant.INTERNATIONAL_PROTOCOL); } HttpResponse response = client.execute(signedRequest); // 打印响应Body体信息 HttpEntity resEntity = response.getEntity(); if (resEntity != null) { String responseBody = EntityUtils.toString(resEntity, StandardCharsets.UTF_8); LOGGER.info("HTTP response body: {}", responseBody); } } catch (Exception e) { LOGGER.error(e.getMessage()); } finally { if (client != null) { client.close(); } } } } - 运行HttpClientDemo.java,对请求进行签名、访问API并打印结果。
显示{"200": "sdk success"},表示签名成功,API请求成功发送到后端。
如果改变AK或SK的值,API网关将返回的错误信息error_msg。
您也可以通过这个视频教程了解AK/SK认证的使用:https://bbs.huaweicloud.com/videos/100697。

