您的应用服务器访问认证服务器申请和管理 Token 时,需要将请求参数按照指定方式排序拼接,组织成待签名字符串,然后使用秘钥 secretKey 加密得到签名。
具体约束规则如下:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
&”分隔; 所有参数(包括签名本身)都需要参与排序; 排序规则为参数名的字典序升序(ASCII码顺序); 如果参数值为空字符串,则不包括此参数对; 签名生成的最终格式应为:signature=加密后的签名值
以阿里云的AccessKey ID和AccessKey Secret为例,进行Token申请时,一个典型的签名过程如下:
收集请求参数:首先,你需要收集所有请求的参数,包括但不限于AccessKeyId、Action、SignatureMethod、SignatureNonce、SignatureVersion、Timestamp等。其中,SignatureNonce是一个随机数,用于防止重放攻击;Timestamp是请求的时间戳。
排序参数:将所有参数按照其key的字典序进行排序。例如,如果参数有Action=DescribeInstances
、AccessKeyId=YourAccessKeyId
、SignatureVersion=1.0
、SignatureMethod=HMAC-SHA1
、Timestamp=2023-04-05T12:00:00Z
、SignatureNonce=RandomNonce
,则排序后保持原顺序(因为它们已经按字典序排列)。
构造待签名字符串:按照排序后的顺序,将每个参数的key和value用等号连接,各参数之间用"&"连接。注意,最后要加上你的签名方法,如SignatureMethod=HMAC-SHA1&
,但实际签名计算时不包含这个Signature本身。所以,构造的字符串应该是这样的(Signature字段除外):
AccessKeyId=YourAccessKeyId&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&SignatureNonce=RandomNonce&SignatureVersion=1.0&Timestamp=2023-04-05T12:00:00Z
生成签名:使用排序并构造好的字符串,结合你的SecretKey,通过指定的签名算法(如HMAC-SHA1或HMAC-SHA256)计算签名。在Python中,这可以通过hmac
库完成,示例代码片段如下:
import hmac
import hashlib
import base64
# 假设secret_key是你的密钥
secret_key = 'YourSecretKey'
# 上面构造的待签名字符串
string_to_sign = 'AccessKeyId=YourAccessKeyId&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&SignatureNonce=RandomNonce&SignatureVersion=1.0&Timestamp=2023-04-05T12:00:00Z'
# 使用HMAC-SHA1算法生成签名
signature = hmac.new(secret_key.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1).digest()
# 对签名结果进行Base64编码
signature_b64 = base64.b64encode(signature).decode('utf-8')
拼接最终请求参数:将计算得到的签名Base64编码值作为Signature参数添加到请求中,确保Signature位于所有其他参数之后,并且其值前面有signature=
前缀。
完成上述步骤后,你就可以使用这个包含了签名的请求参数集去访问认证服务器,获取或管理Token了。