- 1.3 FDS简介
- 1.4 基本概念
- 1.5 使用场景
- 1.6 快速入门
- 1.6.1 帐号注册
- 1.6.2 创建Bucket
- 1.6.3 上传文件
- 1.6.4 生成文件预签名链接
- 1.6.5 为云服务密钥授权
- 1.6.6 通过SDK下载文件
- 1.7 请求认证
- 1.7.1 OAuth认证
- 1.7.2 签名认证
- 1.7.3 预签名认证
- 1.8 权限列表
- 1.9 Presigned URL
- 1.10 SDK
- 1.10.1 Service操作API的签名和示例
- 1.10.2 Bucket操作API的签名和示例
- 1.10.3 Object操作API的签名和示例
- 1.11 Service操作REST API
- 1.11.1 List Buckets
- 1.12 Bucket操作REST API
- 1.12.1 PUT Bucket
- 1.12.2 DELETE Bucket
- 1.12.3 HEAD Bucket
- 1.12.4 PUT Bucket ACL
- 1.12.5 GET Bucket META
- 1.12.6 GET Bucket ACL
- 1.12.7 List Objects
- 1.13 Object操作 REST API
- 1.13.1 Put Object
- 1.13.2 POST Object
- 1.13.3 GET Object
- 1.13.4 HEAD Object
- 1.13.5 Copy Object
- 1.13.6 PUT Object ACL
- 1.13.7 GET Object ACL
- 1.13.8 GET Object metadata
- 1.13.9 DELETE Object
- 1.13.10 Delete multiple Objects
- 1.13.11 DELETE Object ACL
- 1.13.12 Restore Object
- 1.13.13 Rename Object
- 1.13.14 Prefetch Object
- 1.13.15 Refresh Object
- 1.13.16 Init multipart upload
- 1.13.17 Upload part
- 1.13.18 Complete multipart-upload
- 1.13.19 Abort multipart upload
- 1.14 CDN使用
- 1.15 服务端加密
- 1.16 图像处理
- 1.17 计量计费
- 1.18 分片上传
- 1.19 误删数据恢复
- 1.20 TTL功能
- 1.21 跨域资源共享(CORS)
- 1.22 FDS命令行工具
- 1.23 FDS第三方迁移工具
- 1.24 FDS存量数据加密工具
- 1.25 FAQ
- 1.26 问题调查
- 1.27 问题反馈
- 1.28.1 abort-multipart-upload
- 1.28.2 complete-multipart-upload
- 1.28.3 delete-bucket
- 1.28.4 delete-multiple-objects
- 1.28.5 delete-object-acl
- 1.28.6 delete-object
- 1.28.7 delete-objects
- 1.28.8 get-bucket-acl
- 1.28.9 get-bucket-meta
- 1.28.10 get-endpoint
- 1.28.11 get-object-acl
- 1.28.12 get-object
- 1.28.13 copy-object
- 1.28.14 get-object-metadata
- 1.28.15 head-bucket
- 1.28.16 head-object
- 1.28.17 init-multipart-upload
- 1.28.18 list-bucket
- 1.28.19 list-objects
- 1.28.20 OAuth
- 1.28.21 post-object
- 1.28.22 prefetch-object
- 1.28.23 put-bucket-acl
- 1.28.24 put-bucket
- 1.28.25 put-object-acl
- 1.28.26 put-object
- 1.28.27 rename-object
- 1.28.28 refresh-object
- 1.28.29 restore-object
- 1.28.30 upload-part
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.7.2 签名认证
基本概念
- Account Key, Account Secret: 用于标示开发者,获取方式见快速入门中
生成新的云密钥
图中的帐号密钥
- App Key, App Secret: 用于标示开发者的App,获取的方式见快速入门中
生成新的云密钥
- Signature:根据Access Key和Secret Key和用户请求计算出的数字签名,用于验证用户身份。
Note 介绍签名算法时我们不区分Account Key和App Key,统称为Access Key;同时,我们也不区分Account Secret和App Secret,统称为Secret Key。
基于签名的认证过程
- 构建准备发往FDS的HTTP请求;
- 使用Access Key,Secret Key和构建好的请求内容,计算签名;
- 将计算好的签名和Access Key组合起来,置于HTTP请求的“Authorization” Header中,将请求发往FDS;
- FDS收到请求,从“Authorization”Header中解析Access Key和对应的签名;
- FDS用解析出的Access Key获取到对应的Secret Key;
- FDS用同样的签名算法计算签名,得到服务端签名;
- FDS对比服务端签名和用户请求中解析出来的签名,如果一致则认证通过,否则认证不通过。
签名算法
签名算法是签名认证的核心,下面是签名算法的详细介绍:
签名在HTTP Header中的格式:
"Authorization: Galaxy-V2" + " " + Access Key + ":" + Signature;
签名计算:
Signature = Base64(Hmac-Sha1(Secret Key, StringToSign));
签名字符串(StringToSign)的构造:
StringToSign = HttpMethod + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource;
CanonicalizedHeaders构造:
用户可以通过"x-xiaomi-"的方式,向FDS传自定义的Header,CanonicalizedHeader指的是规范化后的用户自定义的Headers,规范化的过程如下:
- 所有的Header都转化成小写;
- 将Header按key进行字典序排序;
- 将具有相同Key的Headers合并,多个值之间用";"分隔;
- 将上述字符串连接起来即是CanonicalizedHeaders。
CanonicalizedResource构造:
CanonicalizedResource= URI的相对路径 + URI中SubResrouce(ACL等)按字典序排序并用"&"拼接后得到的字符串
各语言实现参考
- Android/Java: com.xiaomi.infra.galaxy:galaxy-fds-core:3.0.8 com.xiaomi.infra.galaxy.fds.auth.signature.Signer
- c++
- golang
- iOS
- php
- python
各语言构造签名认证相关类
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论