对象存储服务 OBS-基于浏览器上传的表单中携带签名:Conditions

时间:2024-05-29 15:10:13

Conditions

Conditions是一个用于验证本次请求合法的一种机制,可以使用这些条件限制请求中必须包含的内容。实例中的条件要求请求的桶名必须是book,对象名必须以user/为前缀,对象的acl必须是公共可读。除了AccessKeyId、signature、file、policy、token、field names以及前缀为x-ignore-外的表单中的所有项,都需要包含在policy中。下表是conditions中应该包含的项:

表1 policy中应该包含的条件元素

元素名称

描述

x-obs-acl

请求中的ACL。

支持精确匹配和starts-with条件匹配。

content-length-range

设置上传对象的最大最小长度,支持range匹配。

Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires

REST请求特定头域。

支持精确匹配和starts-with条件匹配。

key

上传对象的名字。

支持精确匹配和starts-with条件匹配。

bucket

请求桶名。

支持精确匹配。

success_action_redirect

上传对象成功后重定向的URL地址。具体描述请参见5.4.2-POST上传

支持精确匹配和starts-with条件匹配。

success_action_status

如果未指定success_action_redirect,则成功上传时返回给客户端的状态码。具体描述请参见5.4.2-POST上传

支持精确匹配。

x-obs-meta-*

用户自定义元数据。

元素中的关键字不允许含有非ASCII码或不可识别字符,如果一定要使用非ASCII码或不可识别字符,需要客户端自行做编解码处理,可以采用URL编码或者Base64编码,服务端不会做解码处理。

支持精确匹配和starts-with条件匹配。

x-obs-*

其他以x-obs-为前缀的头域。

支持精确匹配和starts-with条件匹配。

x-obs-security-token

请求消息头中字段名。

临时AK/SK和securitytoken鉴权必加字段名。如何获取临时AK/SK和securitytoken请参考通过token获取临时访问密钥和securitytoken

Policy条件匹配的方式如下:

表2 policy条件匹配方式

条件

描述

Exact Matches

默认是完全匹配,post表单中该项的值必须和policy的conditions中设置的值完全一样。例如:上传对象的同时设置对象ACL为public-read,表单中x-obs-acl元素的值为public-read,policy中的conditions可以设置为

{"x-obs-acl": "public-read" }或者[ "eq", "$x-obs-acl", "public-read"],这两者是等效的。

Starts With

如果使用该条件,则post表单中对应元素的值必须是固定字符串开始。例如:上传对象名以user/为前缀,表单中key元素的值可以是user/test1、user/test2,policy的conditions中该条件如下:

["starts-with", "$key", "user/"]

Matching Any Content

post表单中对应元素的值可以是任意值。例如:请求成功后重定向的地址可以是任意地址,表单中success_action_redirect元素的值可以是任意值,policy的conditions中该条件如下:

["starts-with", "$success_action_redirect", ""]

Specifying Ranges

post表单中file元素文件的内容长度可以是一个指定的范围,只用于限制对象大小。例如上传对象大小为1-10MB,表单中file元素的内容长度可以是1048576-10485760,policy的conditions中该条件如下,注意值没有双引号:

["content-length-range", 1048576, 10485760]

policy使用json格式,conditions可以支持 { } 和 [ ] 两种方式,{ }中包含表单元素的key和value两项,以冒号分隔;[ ]中包含条件类型、key、value三项,以逗号分隔,元素key之前使用$字符表示变量。

Policy中必须转义的字符如下:

表3 policy中必须转义的字符

转义后的字符

真实字符

\\

反斜杠(\)

\$

美元符号($)

\b

退格

\f

换页

\n

换行

\r

回车

\t

水平制表

\v

垂直制表

\uxxxx

所有Unicode字符

support.huaweicloud.com/api-obs/obs_04_0012.html