API网关开发指南——APP认证与IAM认证调用API(附行业趋势、转型格局与市场空间)
2026-08-01 06:39:18
1
API调用者需要在请求中携带签名信息完成身份认证,API网关收到请求后计算签名并与客户端签名比对——匹配则放行,否则拒绝——这是API网关APP认证的核心机制,也是华为云API网关保障API安全调用的第一道防线。这份2026年5月发布的开发指南系统梳理了APP认证(签名认证)和IAM认证(Token认证与AK/SK认证)两大调用方式的完整开发流程,覆盖Java、Go、Python、C、JavaScript、PHP、C++、C、Android、curl共10种语言/工具的SDK集成方案。从构造规范请求的6个步骤到签名计算的HMAC-SHA256算法,从环境变量安全存储AK/SK到时间戳15分钟有效期校验,再到后端服务对签名请求的验证逻辑,为开发者提供了一套从“调用端签名”到“服务端验签”的全链路技术实现指南。
一、API调用的两种认证方式与使用场景
1.1 APP认证——签名认证的完整流程
APP认证(签名认证)是API网关最常用的调用认证方式,要求API调用者使用API所授权凭据的Key和Secret,对API请求进行加密签名。认证前需要准备三类信息:API的请求信息(域名、请求路径和请求方法)、API已发布的环境、以及API所授权凭据的Key和Secret。AppKey/Key是访问密钥ID,与私有访问密钥关联的唯一标识符;AppSecret/Secret是与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方并防止请求被修改。
APP认证的工作原理分为6个步骤:客户端构造规范请求、使用规范请求和其他信息创建待签字符串、使用AK/SK和待签字符串计算签名、将生成的签名信息作为请求消息头或查询字符串参数添加到HTTP请求中、API网关收到请求后执行同样的计算、将网关计算的签名与客户端携带的签名比对——匹配则处理请求,否则拒绝。需要注意的是,客户端须注意本地时间与时钟服务器的同步,API网关会校验请求时间与网关收到请求的时间差,如果大于15分钟将拒绝请求。

1.2 IAM认证——Token认证与AK/SK认证
IAM认证提供两种方式:Token认证和AK/SK认证。Token认证适用于一次性调用场景,调用者先通过IAM接口获取用户Token,再将Token值设置到调用请求的“X-Auth-Token”头域中。获取Token的请求需要提供用户名、密码和项目ID,响应头中的“X-Subject-Token”即为Token值,可设置为环境变量方便后续使用。
AK/SK认证则与APP认证的签名机制相同,用IAM的AK代替APP认证中的AppKey,SK代替AppSecret,即可完成签名和请求。AK/SK认证的签名算法推荐使用V11版本,用户可通过实例参数sign_algorithms修改签名算法(需提交工单申请)。同样需要客户端注意本地时间与时钟服务器的同步,时间差大于15分钟将导致请求被拒绝。企业联邦用户不能创建访问密钥,但可以创建临时访问凭证(临时AK/SK和SecurityToken)。

二、APP认证的签名计算原理与多语言SDK
2.1 签名计算的6个步骤与规范请求构造
签名计算的第一步是构造规范请求(CanonicalRequest),包含6个部分:HTTP请求方法(如GET)、规范URI(请求资源路径,以“/”结尾)、规范查询字符串(按字符代码升序排序)、规范消息头(包含X-Sdk-Date,消息头名称转为小写并按升序排序)、用于签名的消息头声明(SignedHeaders,X-Sdk-Date必须参与签名)、请求体哈希值(SHA-256算法,空字符串的哈希值为e3b0c44298fc1c149afbf4c8996fb92472ae41e4649b934ca495991b7852b855)。
第二步创建待签字符串(StringToSign),格式为“Algorithm + \n + RequestDateTime + \n + HashedCanonicalRequest”,其中Algorithm为“SDK-HMAC-SHA256”,RequestDateTime与X-Sdk-Date头值相同。第三步计算签名:将AppSecret和待签字符串作为HMAC-SHA256的输入,输出二进制值转换为十六进制表示。第四步将签名信息添加到Authorization头,格式为“Authorization: SDK-HMAC-SHA256 Access=AppKey, SignedHeaders=host;x-sdk-date, Signature=signature”。认证通过后,请求才会发送给后端服务进行业务处理。

2.2 10种语言SDK的集成方案概览
文档提供了10种语言/工具的SDK集成方案。Java SDK基于Maven工程,核心类为HttpClientDemo.java和OkHttpDemo.java,需要引入java-sdk-core-x.x.x.jar,AK/SK通过环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK传入。Go SDK的核心代码在signer.go,使用core.Signer结构体进行签名。Python SDK通过apig_sdk.signer模块,使用signer.Signer()生成签名对象。C SDK包含apigateway-signature(签名共享库)、sdk-request(调用示例)和backend-signature(后端签名示例)三个项目。
JavaScript SDK支持Node.js和浏览器两种运行环境,Node.js使用signer.js模块,浏览器需要引入hmac-sha256.js和moment.js依赖,通过XMLHttpRequest发起跨域请求(需在API网关配置跨域共享策略)。PHP SDK通过signer.php引入,使用Signer类和Request类。C++和C SDK需要安装openssl和curl库,通过Makefile编译。Android SDK基于Android Studio工程,在app/libs目录下引入java-sdk-core-x.x.x.jar,使用okhttp3.Request发送签名请求。curl方式则通过JavaScript SDK的demo.html生成curl命令,直接复制到命令行执行。



















三、后端服务签名校验——从验收到放行的完整逻辑
3.1 签名校验与认证签名的对称关系
API绑定签名密钥后,API网关向后端服务发送请求时会携带签名信息。后端服务需要集成API网关提供的SDK,对请求中的签名信息进行校验,确保请求确实来自API网关且未被篡改。校验的核心逻辑与客户端签名计算是对称的:后端服务从请求头中解析Authorization信息,提取signingKey和signedHeaders,用signingKey查找对应的signingSecret,然后按照相同的算法重新计算签名,与客户端携带的签名比对。
如果签名匹配则放行请求到业务处理逻辑,否则返回401未授权。校验过程中还需要检查时间戳是否在15分钟以内(X-Sdk-Date头),以及signedHeaders中声明的所有头域是否都在请求中存在。对于需要读取请求体(Body)的场景,需要将HttpServletRequest包装为可重复读取的包装类(如RequestWrapper),因为输入流默认只能读取一次。

3.2 Java Spring Boot后端校验示例
Java后端校验示例基于Spring Boot框架,通过Filter实现签名校验。核心流程在ApigatewaySignatureFilter的doFilter方法中:首先使用正则表达式“SDK-HMAC-SHA256\s+Access=([^,]+),\s?SignedHeaders=([^,]+),\s?Signature=(\w+)”解析Authorization头,得到signingKey和signedHeaders数组;然后从secrets Map中通过signingKey查找对应的signingSecret(secrets在静态代码块中从环境变量加载);再创建Request对象,设置method、endpoint、parameters和headers,判断是否需要读取body(当x-sdk-content-sha256头值为“UNSIGNED-PAYLOAD”时跳过body读取);校验X-Sdk-Date时间戳与服务器时间差不超过15分钟;最后调用Signer.verify方法验证签名,通过则chain.doFilter继续执行,否则返回401。

3.3 Python Flask后端校验示例
Python后端校验示例基于Flask框架,通过装饰器wrapper实现签名校验。核心流程在requires_apigateway_signature装饰器的wrapped函数中:使用相同的正则表达式解析Authorization头;从secrets字典中查找signingSecret;创建signer.HttpRequest对象并设置method、url、query、headers和body;校验X-Sdk-Date时间戳与UTC时间差不超过15分钟;调用signer.Verify方法验证签名。校验通过后执行被装饰的函数,否则返回401。示例中还实现了GET、POST、PUT、DELETE四个方法均使用requires_apigateway_signature装饰器。

3.4 C ASP.NET Core后端校验示例
C后端校验示例基于ASP.NET Core框架,通过IAuthorizationFilter实现签名校验。核心流程在ApigatewaySignatureFilter的OnAuthorization方法中:使用Regex解析Authorization头;从Dictionary中查找signingSecret;创建HttpRequest对象并设置method、host、uri、query和headers;使用Request.EnableRewind()启用Body可重复读取;校验X-Sdk-Date时间戳;调用Signer.Verify方法验证签名。校验通过则继续执行Controller中的业务逻辑(GET/POST/PUT/DELETE方法),否则返回401。后端校验的三语言示例(Java/Python/C)展示了主流的后端开发框架如何与API网关签名机制集成,为企业构建安全的生产级API服务提供了可直接参考的代码模板。
