简介
对API请求进行签名计算
当您将HTTP请求发送到百度智能云时,您需要对您的请求进行签名计算,以便百度智能云可以识别您的身份。您将使用百度智能云的访问密钥来进行签名计算,该访问密钥包含访问密钥ID(Access Key Id, 后文简称AK)和秘密访问密钥(Secret Access Key, 后文简称SK).
注意:
仅当您手动创建HTTP请求(RESTful API调用)时,您才需要了解如何对请求进行签名计算。当您使用智能云提供的SDK时,在SDK中已经封装了完整的签名算法,使用者无需自己实现。
了解如何创建、查看和下载Access Key Id(AK)和Secret Access Key(SK), 请参考管理您的AKSK.
何时需要签署API请求?
当您编写代码将HTTP请求发送到百度智能云时(使用RESTFul API),就需要包含用于签名计算的代码。您可能在如下场景下会直接调用百度智能云的RESTFul API:
- 您正在使用的编程语言,或您需要请求的智能云服务,没有对应的智能云SDK。
- 您希望能够完全控制您的API请求。
在使用智能云SDK时,您不需要进行签名计算,这些SDK中会管理和封装签名算法、处理请求重试和错误处理等。
为什么要进行签名计算?
签名过程会通过以下方式保护您的API请求:
- 验证请求者的身份
签名可以确保请求是由某个具有有效访问密钥的用户或服务发起。详细请参考管理您的AKSK - 保护传输中的数据,防止非法篡改
若请求在传输过程中遭到非法篡改,由于第三方无法对篡改后的请求进行计算,得到新的认证字符串(Authorization),智能云收到请求后认证字符串匹配将失败,因此身份校验无法通过。 - 防止重放攻击
认证字符串(Authorization)都具有指定的有效时间。如请求被截获,第三方无法在有效时间之外重放请求。
为了保护用户的SK信息,百度智能云不直接使用SK信息,而是使用SK生成SigningKey,同时在SigningKey中包含有效时间范围。这样可以减少用户因SigningKey丢失带来的安全隐患。
签名API请求
在请求签名之前,请先计算请求的哈希(摘要)。然后,您使用哈希值、来自请求的其他信息以及您的秘密访问密钥(Secret Access Key,SK),计算另一个称为签名(Signature) 的哈希, 得到签名后,进行一定规则的拼装成最终的认证字符串,也就是最终您需要包含在API请求中的Authorization字段。
您可以通过以下方式携带认证字符串:
- 在HTTP Header中包含认证字符串
-
在URL中包含认证字符串
用户也可以将认证字符串放在HTTP请求Query String的authorization参数中。常用于生成URL给第三方使用的场景,例如要临时把某个数据开放给他人下载。关于如何在URL中包含认证字符串,请参考在URL中包含认证字符串。
签名版本
百度智能云目前支持两个签名版本:认证字符串版本v2和认证字符串版本v1,绝大多数情况下,您应该使用版本v1。v2版本与v1版本的最大区别在于更高的请求响应性能,目前仅表格服务BTS已经支持v2版本的认证字符串。
视频参考
您也可以参看从零开始用Python调用API接口,视频的前半部分介绍了百度智能云鉴权认证机制,帮助您更快的进行了解。