开发者社区 问答 正文

API参考 - 使用API - 签名机制


RDS服务会对每个访问的请求进行身份验证,所以无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名(Signature)信息。RDS通过使用Access Key ID和Access Key Secret进行对称加密的方法来验证请求的发送者身份。Access Key ID和Access Key Secret由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理)。其中,Access Key ID用于标识访问者的身份,Access Key Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
用户在访问时,按照下面的方法对请求进行签名处理:[list=1]

  • 使用请求参数构造规范化的请求字符串(Canonicalized Query String)。按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到Signature参数本身)进行排序。
    [tr=transparent][/url]说明[tr=transparent]
    得到的签名值在作为最后的请求参数值提交给RDS服务器的时候,要和其他参数一样,按照RFC3986的规则进行URL编码)。
    以DescribeDBInstances为例,签名前的请求URL为:[url]http://rds.aliyuncs.com/?Timestamp=2013
    -06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2014-08-15&SignatureVersion=1.0那么StringToSign就是:GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeDBInstances&Format%3DXML&RegionId%3Dregion1&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3DNwDAxvLU6tFE0DVb&SignatureVersion%3D1.0&TimeStamp%3D2013-06-01T10%253A33%253A56Z&Version%3D2014-08-15假如使用的Access Key Id是“testid”,Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,则计算得到的签名值是:BIPOMlu8LXBeZtLQkJTw6iFvw1E=
    签名后的请求URL为(注意增加了Signature参数):http://rds.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2014-08-15&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D
  • 展开
    收起
    梨好橙 2018-09-11 23:23:46 1026 分享 版权
    阿里云 AI 助理回答

    在使用RDS服务时,为了确保请求的安全性和验证发送者的身份,每个访问请求(不论采用HTTP还是HTTPS协议)都必须包含签名(Signature)信息。这一过程涉及Access Key ID和Access Key Secret的使用,它们由阿里云官方提供给用户,并需通过阿里云官方网站进行申请与管理。具体操作步骤如下:

    签名处理流程

    1. 构造规范化请求字符串(Canonicalized Query String):

      • 首先,按照参数名称的字典顺序排序所有请求参数。这包括了公共请求参数和特定接口的自定义参数,但明确排除Signature参数本身。
      • 排序时注意大小写敏感性。
    2. 参数编码:

      • 对排序后的每个参数的名称和值执行URL编码,遵循UTF-8字符集。其中:
        • A-Z、a-z、0-9以及“-”、“_”、“.”和“~”不进行编码。
        • 其他字符转换为%XY格式,XY代表该字符的ASCII码16进制表示。
        • 扩展的UTF-8字符则编码为%XY%ZA...形式。
        • 英文空格应编码为%20而非加号(+)。

    示例说明

    以调用DescribeDBInstances接口为例,原始请求URL可能形如:http://rds.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z。在实际提交前,除了Signature本身外的所有参数需按上述规则排序并进行URL编码,最终将计算出的签名值作为请求参数之一,同样遵循RFC3986的URL编码规则加入到请求中。

    注意事项

    • 安全性: Access Key Secret务必保密,不得泄露给任何第三方。
    • 编码一致性: 确保签名计算过程中使用的编码方式与文档要求一致,避免因编码问题导致签名验证失败。
    • 使用SDK: 考虑使用阿里云提供的SDK来简化签名过程,减少手动实现的复杂度和出错概率。

    综上所述,通过严格遵循签名机制的规范,您可以有效地对RDS服务的请求进行签名处理,确保数据交互的安全性与合法性。

    有帮助
    无帮助
    AI 助理回答生成答案可能存在不准确,仅供参考
    0 条回答
    写回答
    取消 提交回答