You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SharedKey认证Azurite的Blob存储REST API操作

用SharedKey授权Azurite Blob操作(Postman实现)

核心原理

SharedKey授权需要构造签名字符串,用存储账户密钥做HMAC-SHA256加密后Base64编码,最终Authorization头格式为:SharedKey <存储账户名>:<加密编码后的签名>

签名字符串的拼接规则(Blob服务):

<HTTP方法>\n
<Content-MD5>\n
<Content-Type>\n
<请求日期(RFC1123格式)>\n
<资源路径(包含容器和Blob,需URL编码)>

Postman自动生成Authorization头步骤

  1. 设置请求基本信息

    • PUT请求:URL填http://127.0.0.1:10000/<存储账户名>/<容器名>/<Blob名>(Azurite Blob默认端口10000)
    • GET请求:URL填http://127.0.0.1:10000/<存储账户名>/<容器名>/<Blob名>
  2. 添加预请求脚本
    在Postman的「Pre-request Script」标签里粘贴以下代码,替换<你的存储账户名>和<你的存储账户密钥>:

    // 替换成你的Azurite存储账户名和密钥
    const accountName = "<你的存储账户名>";
    const accountKey = "<你的存储账户密钥>";
    
    // 获取请求方法、URL、Headers
    const method = pm.request.method.toUpperCase();
    const url = new URL(pm.request.url.toString());
    const resourcePath = url.pathname;
    
    // 构造签名字符串
    const date = new Date().toUTCString(); // RFC1123格式日期
    const contentMd5 = pm.request.headers.get("Content-MD5") || "";
    const contentType = pm.request.headers.get("Content-Type") || "";
    const stringToSign = `${method}\n${contentMd5}\n${contentType}\n${date}\n${resourcePath}`;
    
    // 计算HMAC-SHA256并Base64编码
    const key = Buffer.from(accountKey, "base64");
    const hmac = require("crypto").createHmac("sha256", key);
    const signature = hmac.update(stringToSign).digest("base64");
    
    // 设置Authorization头和Date头
    pm.request.headers.add({ key: "Authorization", value: `SharedKey ${accountName}:${signature}` });
    pm.request.headers.add({ key: "Date", value: date });
    
  3. 设置其他必要Headers(PUT请求额外需要)

    • 上传Blob时,添加Content-Type头(比如application/octet-stream,文本文件可设text/plain)
    • 可选:若需验证内容完整性,添加Content-MD5头(Blob内容的MD5值Base64编码)
  4. 发送请求
    直接点击发送即可,脚本会自动生成符合要求的Authorization和Date头。

手动计算验证(可选)

如果想手动生成签名,步骤如下:

  • 构造签名字符串:比如PUT请求,假设日期为Wed, 15 Nov 2023 12:00:00 GMT,资源路径是/myaccount/mycontainer/myblob.txt,Content-Type为text/plain,Content-MD5为空,字符串为:
    PUT\n
    \n
    text/plain\n
    Wed, 15 Nov 2023 12:00:00 GMT\n
    /myaccount/mycontainer/myblob.txt
    
  • 用存储账户密钥(Base64解码后的字节)对上述字符串做HMAC-SHA256加密,再将结果Base64编码
  • 构造Authorization头:SharedKey myaccount:<编码后的签名>

注意事项

  • Azurite的存储账户密钥为Base64格式,无需额外转换,直接按脚本逻辑处理即可
  • 请求日期必须是UTC的RFC1123格式,且Authorization头中的日期要和Date头完全一致
  • 资源路径必须包含存储账户名后的完整路径,比如/myaccount/mycontainer/myblob,不能省略存储账户名

内容的提问来源于stack exchange,提问作者entropy283

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:15:00