添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
冷静的柑橘  ·  We need your consent·  9 月前    · 
追风的豆腐  ·  Parquet format - ...·  1 年前    · 
踏实的胡萝卜  ·  Liquibase 4.13+ ...·  1 年前    · 
  • 使用OSS中的数据作为机器学习的训练样本
  • DataLakeAnalytics+OSS:基于OSS的Severless的交互式查询分析
  • 通过HDP2.6 Hadoop读取和写入OSS数据
  • 通过CDH5 Hadoop读取和写入OSS数据
  • Apache Impala(CDH6)查询OSS数据
  • Spark使用OSS Select加速数据查询
  • 基于OSS+MaxCompute构建数据仓库
  • 数据备份和容灾
  • 备份存储空间
  • 数据库备份到OSS
  • 通过云存储网关使用OSS服务
  • 本地共享文件夹访问
  • 本地磁盘访问
  • OSS上传提示Name or service not known报错
  • osscmd工具上传提示InvalidBucketName报错
  • 调用Callback时页面显示400 call back error
  • OSS服务.netSDK中使用MemoryStream上传文件为空的解决方法
  • OSS下载rar格式文件,打开后乱码
  • IE浏览器下载OSS文件后扩展名被省略
  • OSS支持FTP吗?
  • OSS文件实现强制下载的方法
  • OSS Post请求的Policy设置方法
  • OSS通过range参数获取部分文件
  • OSS的文件更新后,部分地区下载的文件仍是旧的版本
  • 在OSS控制台中读请求与写请求次数统计的来源
  • 使用OSS的JS SDK上传大于100K的文件时报错
  • OSS验证Refer防盗链是否生效
  • OSS变通实现IP黑白名单
  • STS生成的临时账户授权检查逻辑
  • OSS的Bucket权限管理
  • 如何获取AccessKeyId和AccessKeySecret
  • Access key对OSS的bucket控制权限太高,需要对bucket更细粒度的权限控制
  • RAM子账户授权OSS单个bucket中部分文件的访问权限
  • oss域名访问提示Anonymous access is forbidden for this operation.
  • OSS细粒度的权限控制
  • OSS异常流量排查及防护
  • 如何给子账号赋权OSS的操作?
  • 如何授权RAM子账号列举指定文件目录
  • Python sdk中multiupload上传如何验证文件完整性
  • OSS MD5一致性校验说明
  • OSS下载内容与实际内容不一致
  • 域名/网络
  • OSS如何查看Bucket内网、外网域名地址
  • ECS用户如何正确使用OSS内网地址?
  • OSS是否支持Bucket作为三级域名的访问方式?
  • OSS是否支持HTTPS访问
  • 通过反向代理访问OSS的HTTPS域名
  • OSS+CDN访问文件直接下载
  • OSS设置Object更新时自动刷新CDN缓存
  • OSS使用SDK访问Bucket提示Endpoint错误
  • OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'的解决方法
  • 访问OSS资源或者使用SDK时提示“ using the specified endpoint”
  • OSS绑定域名时验证域名所有权
  • 为什么OSS内网域名无法ping通
  • DNS解析
  • 站点中如何应用OSS资源
  • OSS如何开启CDN加速服务
  • OSS触发FIN的条件
  • OSS上传或下载的带宽限制
  • OSS上传慢
  • 如何停止绑定域名时默认开启的CDN服务?
  • 如何设置HTTPS证书托管
  • 对象存储OSS中Bucket的访问域名使用介绍
  • 对象存储OSS查看Bucket统计和Object统计方法
  • 通过OSS控制台资源监控报表功能了解Bucket使用情况
  • 通过OSS控制台概览了解Bucket相关属性
  • OSS通过管理控制台查看资源监控报表的请求次数统计信息
  • 如何授权子账号云查看OSS控制台总概览的基础数据
  • 存储空间(bucket)管理
  • 如何获取OSS上每个文件夹的大小
  • OSS中可以重命名Bucket吗?是否支持Object迁移?
  • OSS如何一键删除Bucket
  • OSS对object和目录的移动与修改操作
  • OSS的Bucket、Object、文件目录命名规范汇总
  • OSSFS通过www账户挂载Bucket
  • OSS API设置LifeCycle提示时间格式错误
  • OSS开启访问日志
  • 查找OSS Object的访问操作记录
  • OSS日志里面206代表什么
  • OSS的Bucket每天会自动生成名称中包含日期的Object
  • OSS数据操作常见问题FAQ
  • Bucket下出现异常文件如何排查
  • 如何查看存储空间大小
  • OSS可创建Bucket个数限制,容量是否需要扩容?
  • 如何删除Bucket
  • 文件(object)管理
  • OSS怎么更改Object元数据信息
  • OSS中LifeCycle删除文件的策略
  • 判断OSS文件被删除
  • OSS删除碎片文件
  • 当Object名称中存在不可见字符如何处理?
  • OSS有哪些批量操作?
  • OSS静态文件的打开方式
  • OSS的gzip压缩如何使用?
  • IE浏览器中浏览OSS的object URL中文文件名乱码
  • OSS 如何设置 Content-Type(MIME)?
  • 上传Object后如何获取访问URL
  • 如何给文件重命名
  • 如何修改、更新、编辑文件?
  • OSS上传文件大小限制
  • OSS SDK如何进行批量操作?
  • Java实现生成URL签名的代码示例
  • PHP实现OSS的签名URL
  • OSS如何通过sdk获取object的签名URL
  • OSS中的时间标准
  • 控制台获取签名链接后过一段时间超时
  • 调用oss sdk操作报错:SignatureDoesNotMatch
  • Object签名URL相关问题
  • 签名错误 (signature not match)
  • API/SDK
  • OSS支持时间同步的sdk
  • nternal.aliyuncs.com...
  • Oss Java sdk实现listobject(列出所有的object)
  • 使用OSS的javasdk的contentMD5出现log4j警告
  • OSS Java SDK超时&重传代码样例
  • 测试版PHP SDK中不能自动检测所需PHP模块的原因
  • OSS API文档 “Date”字段的GMT格式说明
  • - assumed...
  • OSS API返回结果有JSON格式的吗?
  • Python sdk查询所有object列表
  • iOS SDK和Android SDK如何开启log?
  • OSS图片处理服务不支持ICO格式图片
  • OSS图片处理服务绑定域名时提示:域名绑定在自己的其他Bucket上
  • 对象存储OSS控制台操作—图片鉴黄
  • OSS上传图片时exif信息处理规则
  • PHP SDK 2.0.1是否支持图片处理服务
  • OSS 图片处理服务配置文件缓存的方法
  • 怎样用多个域名来使用oss图片服务
  • 图片处理服务处理后的PNG图片的透明背景变黑
  • OSS 图片处理如何保护原始图片不被访问
  • OSS图片处理访问报Forbidden access to the original image错误的处理方法
  • 使用图片处理服务,原图无法访问。报错accessdenied。
  • OSS图片处理服务导致CORS配置失效
  • OSS图片处理URL访问报错NoSuchStyle, NoSuchKey, NoSuchFile
  • 图片的原图是正常的,被图片处理后就旋转了,该怎样处理
  • OSS图片处理对原图和缩略图的限制说明
  • OSS 如何将图片强制缩放成正方形并且不裁剪
  • 图片处理服务是否可以支持跨域操作
  • OSS上传图片访问URL返回http code值为403
  • Authorization字段计算的方法

    Authorization = "OSS " + AccessKeyId + ":" + Signature
    Signature = base64(hmac-sha1(AccessKeySecret,
                VERB + "\n"
                + Content-MD5 + "\n" 
                + Content-Type + "\n" 
                + Date + "\n" 
                + CanonicalizedOSSHeaders
                + CanonicalizedResource))

    细节分析如下:

  • AccessKeySecret 表示签名所需的密钥。
  • VERB 表示HTTP请求的Method,主要有PUT、GET、POST、HEAD、DELETE等。
  • \n 表示换行符。
  • Content-MD5 表示请求内容数据的MD5值,对消息内容(不包括头部)计算MD5值获得128比特位数字,对该数字进行base64编码得出。该请求头可用于消息合法性的检查(消息内容是否与发送时一致),例如”eB5eJF1ptWaXm4bijSPyxw==”,也可以为空。详情请参见 RFC2616 Content-MD5
  • Content-Type 表示请求内容的类型,例如”application/octet-stream”,也可以为空。
  • Date 表示此次操作的时间,且必须为GMT格式,例如”Sun, 22 Nov 2015 08:16:38 GMT”。
  • CanonicalizedOSSHeaders 表示以x-oss- 为前缀的HTTP Header的字典序排列。
  • CanonicalizedResource 表示用户想要访问的OSS资源。
  • 所有以x-oss-为前缀的HTTP Header被称为CanonicalizedOSSHeaders,它的构建方法如下:

  • 将所有以 x-oss-为前缀的HTTP请求头的名字转换成小写的形式 。例如 X-OSS-Meta-Name: TaoBao 转换成 x-oss-meta-name: TaoBao
  • 如果以STS获得的AccessKeyId和AccessKeySecret发送请求时,还需要将获得的security-token值以 x-oss-security-token:security-token 的形式加入到签名字符串中。
  • 将步骤1中得到的所有HTTP请求头按照名字的字典序进行升序排列。
  • 删除请求头和内容之间分隔符两端出现的任何空格。例如 x-oss-meta-name: TaoBao 转换成 x-oss-meta-name:TaoBao
  • 将每一个请求头和内容用 \n 分隔符分隔拼成最后的CanonicalizedOSSHeaders。
  • CanonicalizedOSSHeaders可以为空,无需添加最后的分隔符 \n
  • 如果只有一个CanonicalizedOSSHeaders,例如 x-oss-meta-a\n ,则需要在最后加上 \n
  • 如果有多个CanonicalizedOSSHeaders,例如 x-oss-meta-a:a\nx-oss-meta-b:b\nx-oss-meta-c:c\n ,则需要在每一个CanonicalizedOSSHeaders之后加上 \n
  • 将CanonicalizedResource置为空字符串 ""
  • 设置要访问的OSS资源 /BucketName/ObjectName 。如果仅有BucketName而没有ObjectName,则CanonicalizedResource为”/BucketName/“,如果既没有BucketName也没有ObjectName,则CanonicalizedResource为“/”。
  • 如果请求的资源包括子资源(SubResource) ,那么将所有的子资源按照字典序,从小到大排列并以 & 为分隔符生成子资源字符串。在CanonicalizedResource字符串尾添加 和子资源字符串。此时的CanonicalizedResource为 /BucketName/ObjectName?acl&uploadId=UploadId
  • OSS目前支持的子资源(SubResource)包括acl、uploads、location、cors、logging、website、referer、lifecycle、delete、append、tagging、objectMeta、uploadId、partNumber、security-token、position、img、style、styleName、replication、replicationProgress、replicationLocation、cname、bucketInfo、comp、qos、live、status、vod、startTime、endTime、symlink、x-oss-process、response-content-type、response-content-language、response-expires、response-cache-control、response-content-disposition、response-content-encoding等。
  • 子资源(SubResource)有以下三种类型:
  • 资源标识,例如子资源中的acl、append、uploadId、symlink等,详见 关于Bucket的操作 关于Object的操作
  • 指定返回Header字段,例如 response-*** ,详见 GetObject Request Parameters
  • 文件(Object)处理方式,例如 x-oss-process ,详见 图片处理
  • 签名的字符串必须为 UTF-8 格式。含有中文字符的签名字符串必须先进行 UTF-8 编码,再与 AccessKeySecret 计算最终签名。
  • 签名的方法用 RFC 2104 中定义的HMAC-SHA1方法,其中Key指的是AccessKeySecret。
  • Content-Type Content-MD5 在请求中不是必须的,但是如果请求需要签名验证,空值的话以换行符 \n 代替。
  • 在所有非HTTP标准定义的header中,只有以 x-oss- 开头的header,需要加入签名字符串(如下方签名示例中的x-oss-magic则需要加入签名字符串);其他非HTTP标准header将被OSS忽略。 PUT /nelson HTTP/1.0 Content-MD5: eB5eJF1ptWaXm4bijSPyxw== Content-Type: text/html Date: Thu, 17 Nov 2005 18:49:58 GMT Host: oss-example.oss-cn-hangzhou.aliyuncs.com X-OSS-Meta-Author: foo@bar.com X-OSS-Magic: abracadabra Signature = base64(hmac-sha1(AccessKeySecret,VERB + “\n” + Content-MD5 + “\n”+ Content-Type + “\n” + Date + “\n” + CanonicalizedOSSHeaders+ CanonicalizedResource)) “PUT\n eB5eJF1ptWaXm4bijSPyxw==\n text/html\n Thu, 17 Nov 2005 18:49:58 GMT\n x-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.com\n/oss-example/nelson

    假如AccessKeyId为“44CF959******252F707”,AccessKeySecret为“OtxrzxIsfpFjA7Sw******8Bw21TLhquhboDYROV”,可用以下方法(以Python为例)计算签名(Signature):

    import base64
    import hmac
    import sha
    h = hmac.new("OtxrzxIsfpFjA7Sw******8Bw21TLhquhboDYROV",
                 "PUT\nODBGOERFMDMzQTczRUY3NUE3NzA5QzdFNUYzMDQxNEM=\ntext/html\nThu, 17 Nov 2005 18:49:58 GMT\nx-oss-magic:abracadabra\nx-oss-meta-author:foo@bar.com\n/oss-example/nelson", sha)
    Signature = base64.b64encode(h.digest())
    print("Signature: %s" % Signature)

    签名(Signature)计算结果应该为26NBxoKd******Dv6inkoDft/yA=,由于Authorization = “OSS”+ AccessKeyId + “:” + Signature,所以最后Authorization为 “OSS 44CF95900***BF252F707:26NBxoKd******Dv6inkoDft/yA=”,然后加上Authorization头组成最后需要发送的消息:

    PUT /nelson HTTP/1.0
    Authorization:OSS 44CF95900***BF252F707:26NBxoKd******Dv6inkoDft/yA=
    Content-Md5: eB5eJF1ptWaXm4bijSPyxw==
    Content-Type: text/html
    Date: Thu, 17 Nov 2005 18:49:58 GMT
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    X-OSS-Meta-Author: foo@bar.com
    X-OSS-Magic: abracadabra

    细节分析如下:

  • 如果传入的AccessKeyId不存在或未激活,返回403 Forbidden。错误码:InvalidAccessKeyId。
  • 若用户请求头中Authorization值的格式不对,返回400 Bad Request。错误码:InvalidArgument。
  • OSS所有的请求都必须使用HTTP 1.1协议规定的GMT时间格式。其中,日期的格式为:
    date1 = 2DIGIT SP month SP 4DIGIT; day month year (e.g., 02 Jun 1982)
  • 如果签名验证的时候,头中没有传入Date或者格式不正确,返回403 Forbidden错误。错误码:AccessDenied。
  • 传入请求的时间必须在OSS服务器当前时间之后的15分钟以内,否则返回403 Forbidden。错误码:RequestTimeTooSkewed。
  • 如果AccessKeyId已激活,但OSS判断用户的请求发生签名错误,则返回403 Forbidden,并在返回给用户的response中告诉用户正确的用于验证加密的签名字符串。用户可以根据OSS的response来检查自己的签名字符串是否正确。 返回示例如下:
    <?xml version="1.0" ?>
    <Error>
         SignatureDoesNotMatch
     </Code>
     <Message>
         The request signature we calculated does not match the signature you provided. Check your key and signing method.
     </Message>
     <StringToSignBytes>
         47 45 54 0a 0a 0a 57 65 64 2c 20 31 31 20 4d 61 79 20 32 30 31 31 20 30 37 3a 35 39 3a 32 35 20 47 4d 54 0a 2f 75 73 72 65 61 6c 74 65 73 74 3f 61 63 6c
     </StringToSignBytes>
     <RequestId>
         1E446260FF9B****
     </RequestId>
     <HostId>
         oss-cn-hangzhou.aliyuncs.***
     </HostId>
     <SignatureProvided>
         y5H7yzPsA/tP4+0tH1HHvPEwUv8=
     </SignatureProvided>
     <StringToSign>
    Wed, 11 May 2011 07:59:25 GMT
    /oss-example?acl
     </StringToSign>
     <OSSAccessKeyId>
         AKIAIVAKMSMOY7VO****
     </OSSAccessKeyId>
    </Error>
    >>> base64.b64encode(hash.digest()) 'eB5eJF1ptWaXm4bijSPyxw=='

    hash.digest(),计算出二进制数组(128位)。

    >>> hash.digest()
    'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'
  • 错误计算示例 '781e5e245d69b566979b86e28d23f2c7' # 错误的MD5值进行base64编码后的结果: >>> base64.b64encode(hash.hexdigest()) 'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='
  •