每天一个知识点——怎么调用接口

📅 2026/7/16 17:59:21 👁️ 阅读次数 📝 编程学习
每天一个知识点——怎么调用接口

使用AK/SK认证调用接口

使用AK/SK调用接口,本质上就是用SK对请求做签名,然后把AK和签名一起发给服务端。根据场景不同,有两种主流方式:自己拼签名使用官方SDK

每天一个知识点——AK认证(Access Key 认证)-CSDN博客


一、调用前的准备工作

无论哪种方式,你都需要先拿到以下信息 [cite:1]:

信息项说明
AK/SK从云厂商控制台(如阿里云/AWS/华为云)的"访问密钥"页面获取
Endpoint服务访问域名,不同Region地址不同
URI具体接口的路径和参数
Project/Region部分云厂商还需要项目ID或区域信息

二、方式一:手动构造签名(Python 标准库即可)

核心流程:拼规范请求串 → 用SK做HMAC-SHA256签名 → 拼到Authorization头[cite:2]。

import hmac import hashlib import secrets import time # ====== 1. 准备密钥(从控制台获取) ====== AK = "your-access-key-id" SK = "your-secret-access-key" # 务必保密,不要硬编码在代码中 # ====== 2. 拼规范请求串(简化版,实际需按云厂商文档拼) ====== def canonical_request(method, path, query, body=""): body_hash = hashlib.sha256(body.encode()).hexdigest() return f"{method}\n{path}\n{query}\n{body_hash}" # ====== 3. 生成签名 ====== def sign(secret_key, string_to_sign): return hmac.new( secret_key.encode(), string_to_sign.encode(), hashlib.sha256 ).hexdigest() # ====== 4. 构造请求 ====== method, path, query = "GET", "/api/v1/resources", "page=1&size=10" canon = canonical_request(method, path, query) signature = sign(SK, canon) # 拼 Authorization 头 auth_header = f"AK {AK}:{signature}" # 发请求(需 pip install requests) # import requests # resp = requests.get( # f"https://your-endpoint.com{path}?{query}", # headers={"Authorization": auth_header} # )

三、方式二:使用官方SDK(推荐)

云厂商提供了封装好的SDK,你只需传入AK/SK即可,无需手动处理签名细节。

Python(阿里云为例):

# pip install alibabacloud-ecs20140526 # 按需安装对应产品的SDK from alibabacloud_ecs20140526.client import Client as EcsClient from alibabacloud_ecs20140526 import models as ecs_models from alibabacloud_tea_openapi import models as open_api_models # 配置AK/SK config = open_api_models.Config( access_key_id="your-ak", access_key_secret="your-sk", region_id="cn-hangzhou" ) client = EcsClient(config) # 调用接口(比如查询ECS实例列表) req = ecs_models.DescribeInstancesRequest() resp = client.describe_instances(req) print(resp.body)

Java(阿里云为例):

// Maven 依赖:aliyun-java-sdk-core + 对应产品SDK import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.IAcsClient; DefaultProfile profile = DefaultProfile.getProfile( "cn-hangzhou", // Region "your-access-key-id", // AK "your-secret-key" // SK ); IAcsClient client = new DefaultAcsClient(profile); // 然后调用具体产品的Request即可

Python(华为云为例):

# pip install huaweicloudsdkcore from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.http.http_config import HttpConfig credentials = BasicCredentials("your-ak", "your-sk") config = HttpConfig.get_default_config() # 然后用对应服务的Client调用接口

四、关键注意事项

要点说明
SK绝不可泄露不要硬编码在代码中,推荐用环境变量或密钥管理服务(Vault/KMS)
签名需要时间戳多数云厂商要求签名中包含时间戳,用于防重放攻击
HTTPS必须虽然签名能防篡改,但AK在请求中明文传输,必须走HTTPS防窃听
按厂商文档为准阿里云、AWS、华为云、腾讯云的规范请求格式各有差异,务必参考对应官方文档[cite:2][cite:3]
使用SDK > 手动签名手动签名容易出错(URL编码、Header排序等),生产环境强烈建议使用官方SDK