我正在尝试使用 REST api 在存储帐户下创建 blob 容器
我正在使用托管标识(用于应用服务、节点应用程序)与存储帐户进行交互。此托管标识对资源组和存储帐户 - 存储帐户贡献者和存储 blob 数据贡献者具有必要的权限
以下是我正在执行的步骤:
获取“https://storage-account-name.blob.core.windows.net”资源上托管身份的访问令牌(参考:https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet#obtain-tokens-for-azure-resources)
构造请求并调用 REST api 以创建容器(参考:https://docs.microsoft.com/en-us/rest/api/storageservices/create-container)
我在第二步中发送的强制性标头是:
我得到: statusCode: 403, statusMessage: '服务器验证请求失败。确保 Authorization 标头的值正确形成,包括签名。'
发送授权标头时我遗漏了什么吗?找不到任何使用托管标识调用创建容器 API 的示例。
另一种选择是使用 blob 存储 sdk (https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-nodejs),但找不到任何使用托管标识创建容器的示例。
非常感谢任何使这项工作的指针。
谢谢,
答案 0 :(得分:0)
首先,您无法使用托管身份调用 Rest API。 Authorization
标头需要授权方案、帐户名称和签名。
在 Node.js 中使用 JavaScript v12 SDK 管理 blob:
您可以使用 @azure/identity
作为托管标识。
const { ManagedIdentityCredential } = require("@azure/identity");
const { BlobServiceClient } = require("@azure/storage-blob");
const credential = new ManagedIdentityCredential("<USER_ASSIGNED_MANAGED_IDENTITY_CLIENT_ID>");
const blobServiceClient = new BlobServiceClient(
`https://${account}.blob.core.windows.net`,
credential
);