239
百度
后端签名密钥说明文档__使用手册(开放API)_API 网关-阿里云
- API网关提供后端HTTP服务签名验证功能,创建签名密钥并将签名密钥绑定到API即可开启后端签名(请妥善保管此密钥,API网关会对密钥进行加密存储来保障密钥的安全性)。
- 开启后端签名后API网关到后端HTTP服务的请求将会添加签名信息,后端HTTP服务读取API网关的签名字符串,然后对收到的请求进行本地签名计算,比对网关与本地签名结果是否一致。
- 所有您定义的参数都会参与签名,包括您录入的业务参数、您定义的常量系统参数和API网关系统参数(如 CaClientIp 等)。
- 后端对API网关的签名字符串校验后,如果校验失败,建议返回 errorcode = 403;errormessage = “InvalidSignature”。
读取API网关签名方法
- 网关计算的签名保存在Request的Header中,Header名称:X-Ca-Proxy-Signature
后端HTTP服务加签方法
签名计算的详细demo(JAVA)请参照链接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
签名计算方法步骤如下:
组织参与加签的数据
String stringToSign=
HTTPMethod + "n" + //Method全大写
Content-MD5 + "n" + //Content-MD5 需要判断是否为空,如果为空则跳过,但是为空也需要添加换行符 "n"
Headers + //Headers 如果为空不需要添加"n",不为空的Headers中包含了"n",详见下面组织Headers的描述
Url
计算签名
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8");
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
secret为绑定到API上的签名密钥
说明
Content-MD5
Content-MD5 是指Body的MD5值,只有 HttpMethod 为PUT或者POST且Body为非Form表单时才计算MD5,计算方式为:
String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes("UTF-8")));
Headers
Headers指所有参与签名计算的Header的Key、Value。参与签名计算的Header的Key从 Request Header 中读取,Key为:”X-Ca-Proxy-Signature-Headers”,多个Key用英文逗号分割。
Headers组织方法:
先对所有参与签名计算的Header的Key按照字典排序,并将Header的Key转换成小写,然后按照如下方式拼接:
String headers =
HeaderKey1.toLowerCase() + ":" + HeaderValue1 + "n"+
HeaderKey2.toLowerCase() + ":" + HeaderValue2 + "n"+
...
HeaderKeyN.toLowerCase() + ":" + HeaderValueN + "n"
Url
Url指 Path+Query+Body 中Form参数,组织方法:如果有Query或Form参数则加”?”,然后对 Query+Form 参数按照字典对Key进行排序后按照如下方法拼接,如果没有Query或Form参数,则 Url = Path
String url =
Path +
"?" +
Key1 + "=" + Value1 +
"&" + Key2 + "=" + Value2 +
...
"&" + KeyN + "=" + ValueN
注意这里Query或Form参数的Value可能有多个,多个的时候只取第一个Value参与签名计算
调试模式
为了方便后端签名接入与调试,可以开启Debug模式进行调试,具体方法如下:
1.请求API网关的Header中添加 X-Ca-Request-Mode = debug
2.后端服务在Header中读取 X-Ca-Proxy-Signature-String-To-Sign 即可,因为 HTTP Header 中值不允许有换行符,因此换行符被替换成了 “|”。
注意:X-Ca-Proxy-Signature-String-To-Sign不参与后端签名计算
时间戳校验
如果后端需要对请求进行时间戳校验,可以在API定义中选择系统参数 “CaRequestHandleTime” ,值为网关收到请求的格林威治时间。
最后更新:2016-11-24 11:23:48
上一篇:
API网关使用限制__使用手册(开放API)_API 网关-阿里云
下一篇:
OpenID Connect认证__使用手册(开放API)_API 网关-阿里云
IT培训细分化:云计算和大数据缺口催生“阿里云大学”
欠费流程__购买指导_DDoS 高防IP-阿里云
删除记录__解析记录操作_产品使用手册_云解析-阿里云
快速开始-NodeJS__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云
GIS地理数据分析__应用场景_云数据库 HybridDB-阿里云
网站漏洞体检__安全防护_产品使用手册_云解析-阿里云
如何开通ECS 8000 端口__创建ECS Pipeline_产品使用问题_数据集成-阿里云
产品术语__产品简介_数据集成-阿里云
主机管理控制台操作手册__管理控制台_使用指南_云虚机主机-阿里云
RouteEntrySetType__数据类型_API 参考_云服务器 ECS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云