更新时间:2026-11-06 GMT+08:00
分享

认证鉴权

调用接口仅支持一种认证鉴权方式。

  • 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网关签名工具在其他工程中引用。

  1. 生成AK/SK。如果已生成过AK/SK,则可跳过此步骤,找到原来已下载的AK/SK文件,文件名一般为:credentials.csv。
    1. 登录管理控制台,鼠标移动至右上方的用户名,在下拉列表中选择“我的凭证”。
    2. 在左侧导航栏单击“访问密钥”,然后在页面中单击“新增访问密钥”。
    3. 在“新增访问密钥”弹窗的最下方,勾选理解上述建议的选项,然后单击“下一步”。
    4. 单击“确定”,访问密钥创建成功。
      • 在为账号用户创建访问密钥时,还需要进行身份验证,输入对应的验证码。
      • 如果开启了操作保护,在为IAM用户创建访问密钥时,也需要进行身份验证,输入对应的验证码。
    5. 单击“立即下载”,把访问密钥下载到本地。

    为防止访问密钥泄露,建议您将其保存到安全的位置。

  2. 把AK/SK设置为环境变量。

    本示例以Linux系统的操作为例,在本地环境将1中获取的AK/SK设置为环境变量

    1. 打开终端,执行以下命令编辑环境变量配置文件。
      vi ~/.bashrc
    2. 在文件中添加如下环境变量配置,然后保存文件并退出编辑器。
      export HUAWEICLOUD_SDK_AK="已获取的AK值"  
      export HUAWEICLOUD_SDK_SK="已获取的SK值" 
    3. 执行以下命令使配置文件生效。
      source ~/.bashrc
  3. 获取示例代码,并解压缩。
  4. 打开IDEA,在菜单栏选择“File > New > Project from Existing Sources”。

    选择解压后的“ApiGateway-java-sdk-x.x.x”文件夹,单击“OK”,导入示例工程。

  5. 在“Import Project”页面,选择“Import project from external model”。

    选择“Maven”,最后单击“Create”。

  6. IDEA支持在当前窗口或新窗口创建工程。此处,在弹窗中单击“New Window”。
  7. 配置maven的settings.xml。
    1. 在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>
    2. 在mirrors节点中增加:
      <mirror> 
           <id>huaweicloud</id> 
           <mirrorOf>*,!HuaweiCloudSDK</mirrorOf> 
           <url>https://repo.huaweicloud.com/repository/maven/</url> 
       </mirror>
    3. 增加activeProfiles标签激活配置:
      <activeProfiles> 
           <activeProfile>MyProfile</activeProfile> 
       </activeProfiles>
  8. 下载Maven依赖,选择“pom.xml”并右键选择“Maven > Reload project”。

  9. 打开Eclipse,在菜单栏选择“File > Import”,弹出“Import”对话框,选择“General > Existing Projects into Workspace”,选择解压后的“APIGW-java-sdk-x.x.x”文件夹。

  10. 单击“Finish”,完成导入。导入后的示例工程如下所示。

  11. 修改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(); 
                 } 
             } 
         } 
     }
  12. 运行HttpClientDemo.java,对请求进行签名、访问API并打印结果。

    显示{"200": "sdk success"},表示签名成功,API请求成功发送到后端。

    如果改变AK或SK的值,API网关将返回的错误信息error_msg。

    您也可以通过这个视频教程了解AK/SK认证的使用:https://bbs.huaweicloud.com/videos/100697。

相关文档