更新时间:2024-09-29 GMT+08:00

OBS签名机制概述

功能简介

客户端每次调用OBS API时,都需要在HTTP调用请求中携带签名信息,服务端会对收到的签名信息进行验证。签名验证的目的是:

  • 对请求者进行身份验证,防止未授权用户访问。请求携带的签名包含用户相关信息,华为云会对请求者身份进行验证,只有已授权用户的密钥才能通过签名检查,成功调用API。
  • 防止传输数据被篡改。对数据签名并检验,保障传输内容完整性。
  • 防止签名超期后信息被盗用。设置签名有效期,只有在有效期内签名可以使用,超过有效期后签名失效。

原理说明

OBS签名机制的运作流程如图1所示:

图1 OBS API调用的签名和验签机制
表1 OBS API调用的签名和验签机制

执行端

序号

步骤

说明

客户端

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调用结果

  • 如果验证成功则继续执行API,然后向客户端返回API执行结果。
  • 如果验证失败则通知客户端验证失败,状态码为403 Forbidden,错误码为SignatureDoesNotMatch。定位和修复签名不匹配行为请参见签名不匹配(SignatureDoesNotMatch)如何处理

客户端

8

接收服务端响应

客户端接收服务端响应。

携带签名的方式

OBS支持3种携带签名的方式,分别是Header携带URL携带表单携带。表单携带签名仅适用于POST上传接口。Header和URL携带签名的区别如下表所示:

表2 OBS API调用携带签名

对比项

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