PolarDB-X 1.0-API参考-1.0(2019版本)-签名机制

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。

概述

RPC API要按如下格式在API请求的Query中增加签名(Signature):


https://Endpoint/?SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf

其中:

  • SignatureMethod:签名方式,目前支持HMAC-SHA1。
  • SignatureVersion:签名算法版本,目前版本是1.0。
  • SignatureNonce:唯一随机数,用于防止网络重放攻击。用户在不同请求间要使用不同的随机数值,建议使用通用唯一识别码(Universally Unique Identifier, UUID)。
  • Signature: 使用AccessKey Secret对请求进行对称加密后生成的签名。

计算签名

签名算法遵循RFC 2104 HMAC-SHA1规范,使用AccessSecret对编码、排序后的整个请求串计算HMAC值作为签名。签名的元素是请求自身的一些参数,由于每个API请求内容不同,所以签名的结果也不尽相同。


Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(
StringToSign)) )

完成以下操作,计算签名:

  1. 构建待签名字符串
  1. 使用请求参数构造规范化的请求字符串(Canonicalized Query String):
  1. 按照参数名称的字典顺序对请求中所有的请求参数(包括公共请求参数和接口的自定义参数,但不包括公共请求参数中的Signature参数)进行排序。当使用GET方法提交请求时,这些参数就是请求URI中的参数部分,即URI中“?”之后由“&”连接的部分。
  2. 对排序之后的请求参数的名称和值分别用UTF-8字符集进行URL编码。编码规则如下:
  • 对A-Z、a-z和0-9以及“-”、“_”、“.”和“~”不编码。
  • 其它字符编码成 %XY 的格式,其中 XY 是字符对应ASCII码的16进制表示。比如英文的双引号(””)对应的编码为 %22
  • 扩展的UTF-8字符,编码成 %XY%ZA…的格式。
  • 英文空格要编码成 %20,而不是加号(+)。
    该编码方式和一般采用的 application/x-www-form-urlencoded MIME格式编码算法(比如 Java标准库中的 java.net.URLEncoder的实现)存在区别。编码时可以先用标准库的方式进行编码,然后把编码后的字符串中的加号(+)替换成 %20,星号(*)替换成 %2A%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。本算法可以用下面的percentEncode方法来实现:
private static final String ENCODING = "UTF-8";
private static String percentEncode(String value) throws UnsupportedEncodingException 
{
return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
}
  • 将编码后的参数名称和值用英文等号(=)进行连接。
  • 将等号连接得到的参数组合按步骤 i 排好的顺序依次使用“&”符号连接,即得到规范化请求字符串。
  1. 将第一步构造的规范化字符串按照下面的规则构造成待签名的字符串。
StringToSign=
      HTTPMethod + “&” +
      percentEncode(“/”) + ”&” +
       percentEncode(CanonicalizedQueryString)
  1. 其中:
  • HTTPMethod 是提交请求用的HTTP方法,比如GET。
  • percentEncode(“/”) 是按照步骤1.1中描述的 URL 编码规则对字符 “/” 进行编码得到的值,即 %2F。
  • percentEncode(CanonicalizedQueryString) 是对步骤1中构造的规范化请求字符串按步骤 1.2 中描述的URL编码规则编码后得到的字符串。
  1. 计算签名
  1. 按照RFC2104的定义,计算待签名字符串(StringToSign)的HMAC值。
    说明 计算签名时使用的Key就是您持有的AccessKey Secret并加上一个 “&” 字符(ASCII:38), 使用的哈希算法是SHA1。
  2. 按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。
  3. 将得到的签名值作为Signature参数添加到请求参数中。
    说明 得到的签名值在作为最后的请求参数值提交时要和其它参数一样,按照RFC3986的规则进行URL编码。

示例

DescribeDrdsInstancesAPI 为例,假设使用的AccessKey IdtestidAccessKey Secrettestsecret。 签名前的请求URL如下:


AccessKeyId=testid&Action=DescribeDrdsInstances&Format=XML&RegionId=cn-hangzhou&SignatureMethod=HMAC-SHA1&SignatureNonce=ae5bdbeb-9b44-40a1-8bb4-b40784bff686&SignatureVersion=1.0&Timestamp=2016-01-20T14%3A26%3A15Z&Version=2015-04-13

使用testsecret&,计算得到的签名值是:


h/ka/jNO+WZv8Tqgo4a75sp6eTs=

最后将签名作为Signature参数加入到URL请求中,最后得到的URL为:


http://drds.aliyuncs.com/?AccessKeyId=testid&Action=DescribeDrdsInstances&Format=XML&RegionId=cn-hangzhou&SignatureMethod=HMAC-SHA1&SignatureNonce=ae5bdbeb-9b44-40a1-8bb4-b40784bff686&SignatureVersion=1.0&Timestamp=2016-01-20T14%3A26%3A15Z&Version=2015-04-13&Signature=h%2Fka%2FjNO%2BWZv8Tqgo4a75sp6eTs%3D
相关文章
|
9月前
|
API 网络安全 网络架构
【Azure APIM】解答REST API实现"禁用自签名证书的证书链验证"中的backends参数值从那里取值的问题?
本文介绍APIM服务调用后端API时因自签名证书导致500错误的解决方案。通过REST API禁用证书链验证,关键在于获取正确的backendId(即APIM中配置的Backend名称),并调用PATCH接口设置validateCertificateChain为false,从而解决SSL/TLS信任问题。
293 7
|
10月前
|
数据采集 缓存 API
1688 API 实战指南:搞定批发场景的 3 大核心难题(附签名代码与避坑清单)
本文深入解析了1688 API 在批发场景下的三大核心难题及解决方案,涵盖签名机制、商品数据处理与订单同步等高频问题,提供可复用代码与避坑清单,助你高效对接1688平台。
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
1732 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
10月前
|
存储 监控 前端开发
淘宝商品详情 API 实战:5 大策略提升店铺转化率(附签名优化代码 + 避坑指南)
本文深入解析淘宝商品详情API的核心字段与实战应用,分享如何通过动态定价、库存预警、差评控制等5大策略提升电商转化率。结合300+店铺实战经验,提供优化代码与避坑指南,助力开发者与运营者实现数据驱动的精细化运营。
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
567 2
|
12月前
|
缓存 算法 API
从 0 实现 API 接口签名验证系统:基于 HMAC-SHA256 的防篡改方案(附 Python 全代码)
本文介绍基于 的 API 接口签名验证系统,实现防篡改与防重放攻击,包含完整设计原理、签名生成规则及可运行的 Python 客户端与服务端代码,并提供安全性优化与部署建议。
|
12月前
|
存储 安全 NoSQL
【干货满满】API安全加固指南:签名防篡改+Access Token管理最佳实践
API 安全关乎业务与用户隐私,签名机制防篡改、伪造请求,Access Token 管理身份与权限。本文详解签名生成、Token 类型与管理、常见安全问题及最佳实践,助开发者构建安全可靠的 API 体系。
|
安全 API 开发者
鸿蒙NEXT-鸿蒙老版本迁移最新版本(API19,modelVersion5.1.1)
鸿蒙更新至API19,新增热更新支持、资源过滤、内存分析等功能。本文详解手动迁移步骤及上下文获取问题解决方案。
554 0
|
文字识别 算法 API
视觉智能开放平台产品使用合集之海外是否可以访问人物动漫化的api版本
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
385 0
|
Oracle Java 关系型数据库
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些

热门文章

最新文章

相关产品

  • 云原生分布式数据库 PolarDB-X