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编码 |
否 |
是 |