postpolicy

最近更新时间:2019-01-14 10:10:58

Policy、Signature构建方法

Policy 构建方法

描述

Policy是使用 UTF-8 和 Base64 编码的 JSON 文档,它指定了请求必须满足的条件并且用于对内容进行身份验证。根据您设计Policy文档的方式,您可以对每次上传、每个用户、所有上传或根据其他能够满足您需要的设计来使用它们。 Policy文档示例

{    
    "expiration": "2015-01-01T12:00:00.000Z",
     "conditions": [
        ["eq","$acl", "public-read" ],
        ["eq","$bucket", "mybucket" ],
        ["starts-with", "$key", "2015/01/"]
    ]
}

Expiration

expiration元素采用 ISO 8601 UTC 日期格式来指定策略的过期日期,即只能在指定时间之前进行上传,在这个时间之后的上传都将被认为是非法的,KS3将返回403。注意:时区为格林时间(零时区)而非北京时间(东八区)

Conditions

Policy文档中对上传内容的验证条件。您在表单中指定的每个表单字段(KSSAccessKeyId、Signature、file、policy除外)以及bucket必须包含在条件列表中。
注意:表单中的所有变量会在验证Policy之前进行扩展。因此,应该针对扩展的字段执行所有条件匹配。例如,如果您将key字段设置为 2015/01/${filename},您Policy中的condition可能是 [ "starts-with", "$key", "2015/01/" ]。请勿输入 [ "starts-with", "$key", "2015/01/${filename}" ]

元素名称 描述
bucket 指定bucket必须满足的条件,支持精确匹配和starts-with
acl 指定acl必须满足的条件,支持精确匹配和starts-with
content-length-range 指定上传内容(不止是文件,还有其他表单项)Content-Length的最小和最大值,支持范围匹配
Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires REST 特别头部。支持精确匹配和starts-with
key 上传的key,支持精确匹配和starts-with
success_action_redirect, redirect 成功上传之后重定向的路径。支持精确匹配和starts-with
success_action_status 成功上传之后返回的状态码(没有指定success_action_redirect, redirect的情况下),仅支持精确匹配
其他以x-kss-meta开头的表单项 用户元数据.支持精确匹配和starts-with
其他KSSAccessKeyId、Signature、file、policy外的表单项 KS3服务器不会对这些表单项做处理。但是必须在Policy文档中包含。支持精确匹配和starts-with

Condition匹配规则

匹配规则 示例
精确匹配 指定acl必须等于public-read。{"acl": "public-read" }或者[ "eq", "$acl", "public-read" ]
Starts with 指定key必须以2015/01/开头。["starts-with", "$key", "2015/01/"]
通配 指定success_action_redirect可以是任意值(注意:success_action_status不支持通配)。["starts-with", "$success_action_redirect", ""]
指定Content-Length范围 指定上传内容(不止是文件,还有其他表单项)Content-Length的范围为1048579-10485760。["content-length-range", 1048579, 10485760]

字符转义

下表中的字符必须在Policy文档中做转化

转义字符 描述
\\ 反斜杠
\$ 美元符号
\b 退格键
\f 换页
\n 新建行
\r 回车
\t 水平选项卡
\v 垂直选项卡
\uxxxx Unicode 字符

Signature 构建方法

对于验证的 Post 请求,HTML 表单中必须包含 Policy 和 Signature 信息。
Policy 控制请求中哪些值是允许的。
计算 Signature 的具体流程为:
1)创建一个 UTF-8 编码的 Policy文档,详见Policy构建方法。
2)将 Policy 进行 base64 编码,其值即为 Policy 表单域该填入的值,将该值作为将要签名的字符串(StringToSign)。
3)签名Signature = Base64(HMAC-SHA1(YourSecretKey, UTF-8-Encoding-Of(StringToSign ) ) );

金山云,开启您的云计算之旅

立即注册