后端签名密钥是由您创建的一对 Key 和 Secret,相当于您给网关颁发了一个账号密码。开启后端签名后 ,API 网关向您后端服务请求时会使用这一对Key和Secret对请求内容进行加签处理,您后端服务可以对网关发送过来的请求做对称加签计算,对比网关的签名和服务器端计算的签名是否一致就可以对网关做身份验证。
概述
创建签名密钥并将签名密钥绑定到 API 即可开启后端签名(请妥善保管此密钥,API 网关会对密钥进行加密存储来保障密钥的安全性)。
创建密钥时需要选择 Region,Region 一旦选定不能更改,而且密钥只能被绑定到同一个 Region 下的API上。
一个 API 仅能绑定一个密钥,密钥可以被替换和修改。
所有您定义的参数都会参与签名,包括您录入的业务参数、您定义的常量系统参数和 API 网关系统参数(如 CaClientIp 等)。
后端对 API 网关的签名字符串校验后,如果校验失败,建议返回 errorcode = 403;errormessage = “InvalidSignature”。
若您的后端服务为VPC环境,且通过内网对接(VPC内网访问API网关),您无需使用后端签名,通道自身是安全的。
读取 API 网关签名方法
网关计算的签名保存在 Request 的 Header 中,Header 名称:X-Ca-Proxy-Signature。
后端 HTTP 服务加签方法
签名计算的详细 demo(JAVA)请参照链接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
签名计算方法步骤如下:
1. 组织参与加签的数据:
String stringToSign=
HTTPMethod + "
" + //Method全大写
Content-MD5 + "
" + //Content-MD5 需要判断是否为空,如果为空则跳过,但是为空也需要添加换行符 "
"
Headers + //Headers 如果为空不需要添加"
",不为空的Headers中包含了"
",详见下面组织Headers的描述
Url
2. 计算签名:
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8"); //secret 为绑定到 API 上的签名密钥
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
补充说明
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 +"
"+
HeaderKey2.toLowerCase() + ":" + HeaderValue2 +"
"+
... +
HeaderKeyN.toLowerCase() + ":" + HeaderValueN + "
"
Url
Url指 Path+Query+Body 中 Form 参数,组织方法: 如果有 Query 或 Form 参数则加 ?,然后对 Query+Form 参数按照字典对 Key 进行排序后按照如下方法拼接,如果没有 Query 或 Form 参数,则 Url = Path。
String url =
Path +
"?" +
Key1 + "=" + Value1
+ "&" + Key2 + "=" + Value2 +
...
"&" + KeyN + "=" + ValueN
关键字:中农物联,农业,数据中心,大数据,平台