OBS签名机制概述
功能简介
客户端每次调用OBS API时,都需要在HTTP调用请求中携带签名信息,服务端会对收到的签名信息进行验证。签名验证的目的是:
- 对请求者进行身份验证,防止未授权用户访问。请求携带的签名包含用户相关信息,华为云会对请求者身份进行验证,只有已授权用户的密钥才能通过签名检查,成功调用API。
- 防止传输数据被篡改。对数据签名并检验,保障传输内容完整性。
- 防止签名超期后信息被盗用。设置签名有效期,只有在有效期内签名可以使用,超过有效期后签名失效。
原理说明
OBS签名机制的运作流程如图1所示:
执行端 | 序号 | 步骤 | 说明 |
|---|---|---|---|
客户端 | 1 | 构造HTTP请求 | 用户根据自身诉求构建HTTP请求消息,一个完整的API调用请求包含请求URI、请求方法、请求消息头、请求消息体(可选),如何构造API请求详见构造请求。 |
2 | 计算签名S | 根据构造的HTTP请求和用户访问密钥计算签名S。您可以根据签名携带方式选择一种签名计算方式: | |
3 | 将签名S添加到请求消息中 | 将签名添加到请求消息中,消息携带签名的方式有3种:
| |
4 | 发送携带签名S的API调用请求 | 将携带签名信息的请求发送给服务端。 | |
OBS服务端 | 5 | 接收调用请求 | 接受客户端的调用请求。 |
6 | 验证签名 | 服务端根据接收到的HTTP请求和用户访问密钥再次计算签名S',比较S'与客户端计算的签名S是否一致,如果一致则签名验证成功,不一致则验证失败。 | |
7 | 返回API调用结果 |
| |
客户端 | 8 | 接收服务端响应 | 客户端接收服务端响应。 |
携带签名的方式
OBS支持3种携带签名的方式,分别是Header携带、URL携带和表单携带。表单携带签名仅适用于POST上传接口。Header和URL携带签名的区别如下表所示:
对比项 | Header携带签名 | URL携带签名 |
|---|---|---|
适用场景 | 一般情况下,推荐您使用在Header中携带签名。 | 使用在URL中签名的方式,会将授权的数据在过期时间内暴露在互联网上,具有一定的风险。该方式适用于在不提供给第三方访问密钥的情况下,让第三方能用预签发的URL来进行身份认证,并执行预定义操作。 如果您想通过浏览器访问OBS,建议您使用URL携带签名。 |
是否支持设置Expires | 否 | 是 |
是否支持设置Date | 是 | 否 |
常用API | 所有API接口 | GET、PUT |
时间格式 | 通过Date头域表示请求生成时间,Date必须为RFC 1123格式的GMT时间。 如果Date与当前服务器的时间相差超过15分钟时,则服务端返回403,认为请求已失效。 | Expires字段表示临时授权失效的时间,单位:秒。超过该时间后,URL签名失效。 |
Signature是否需要URL编码 | 否 | 是 |


