API网关签名文档
一、
API网关签名机制旨在确保API请求的合法性和数据完整性,通过使用签名密钥对(APP Key和APP Secret)对请求内容进行加密签名,客户端可以验证其身份,并防止请求在网络传输过程中被篡改,本文详细介绍了API网关的签名流程和相关配置。
二、前置条件
获取签名密钥对
APP Key: 用于标识调用者的身份。
APP Secret: 用于加密生成签名字符串。
每个应用在API网关控制台创建时,系统会自动分配一对签名密钥(APP Key和APP Secret)。
安全认证类型
确保被调用的API的安全认证类型为“阿里云APP”,只有此类型的API请求才会进行签名验证。
三、摘要签名认证方式
API网关提供前端签名及验签能力,主要用于以下两点:
1、验证客户端请求的合法性,确认请求中携带授权后的AK(Access Key)生成的签名。
2、防止请求数据在网络传输过程中被篡改。
四、签名生成流程
签名生成涉及以下步骤:
1、提取关键数据: 从原始HTTP请求中提取关键数据,包括HTTP方法、请求头、日期、内容等,组合成一个签名串。
2、加密处理: 使用APP Secret对关键数据进行加密处理,生成签名。
3、传递签名: 将生成的签名及相关头信息加入到原始HTTP请求中,形成最终请求。
示例签名串格式:
HTTPMethod Accept Content-MD5 Content-Type Date Headers PathAndParameters
字段说明:
HTTPMethod: HTTP的方法,全部大写(如POST)。
Accept: 请求中的Accept头的值。
Content-MD5: 请求体内容的MD5值,Base64编码。
Content-Type: 请求中的Content-Type头的值。
Date: 请求中的Date头的值。
Headers: 选取指定的header参与签名,Key按照字典排序后拼接成字符串。
PathAndParameters: Path和Query参数,按字典排序后拼接。
示例:
假设有一个HTTP请求如下:
POST /http2test/test?param1=test HTTP/1.1 Host: api.aliyun.com Accept: application/json; charset=utf-8 ca-version: 1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 x-ca-timestamp: 15...
对应的签名串格式如下:
POST application/json; charset=utf-8 <Base64(MD5(bodyStream.getbytes("UTF-8"))> application/x-www-form-urlencoded; charset=UTF-8 Mon, 22 Aug 2016 11:21:04 GMT X-Ca-Request-Mode: debug X-Ca-Version: 1 X-Ca-Stage: RELEASE X-Ca-Key: <YourAppKey> X-Ca-Timestamp: 1471864864235 X-Ca-Nonce: b931bc77-645a-4299-b24b-f3669be577ac /demo/post?FormParam1=FormParamValue1&FormParam2=FormParamValue2
服务器验证客户端签名的流程如下:
1、提取关键数据: 从接收到的请求中提取关键数据,得到一个用来签名的签名串。
2、读取APP Key: 从请求中读取APP Key,并通过APP Key查询到对应的APP Secret。
3、加密处理: 使用APP Secret对关键数据签名串进行加密处理,生成服务器端的签名。
4、比对签名: 将从请求中读取的客户端签名与服务器端生成的签名进行比对,如果一致,则验证通过;否则,返回错误应答。
六、SDK支持
API网关提供的SDK内置了签名实现,用户只需将签名密钥配置在SDK中,即可发起携带正确签名的请求,以下是一些常见编程语言的SDK示例:
Java SDK示例:
APIGatewayClient client = new DefaultAPIGatewayClient("https://your-api-gateway"); client.setAppKey("yourAppKey"); client.setAppSecret("yourAppSecret");
Android SDK示例:
APIGatewayClient client = new DefaultAPIGatewayClient("https://your-api-gateway"); client.setAppKey("yourAppKey"); client.setAppSecret("yourAppSecret");
Objective-C SDK示例:
```objective-c
APIGatewayClient *client = [[DefaultAPIGatewayClient alloc] initWithURL:@"https://your-api-gateway"];
[client setAppKey:@"yourAppKey"];
[client setAppSecret:@"yourAppSecret"];
七、注意事项 1、确保APP Key和APP Secret的安全性,避免泄露,一旦泄露,应及时在API网关控制台重置密钥。 2、所有参与签名的Header的Key必须按照字典顺序排序。 3、签名计算中不包括以下头信息:X-Ca-Signature、X-Ca-Signature-Headers、Accept、Content-MD5、Content-Type、Date。
到此,以上就是小编对于“api网关签名文档”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/697461.html