node.js - Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误
问题描述
我正在尝试使用 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 )
我在第二步中发送的强制性标头是:
- 授权:Bearer access-token
- x-ms-日期:2021-06-17T09:01:48.667Z
- x-ms-版本:2020-04-08
我得到:statusCode:403,statusMessage:'服务器未能验证请求。确保 Authorization 标头的值正确形成,包括签名。
发送授权标头时我缺少什么吗?找不到任何使用托管标识调用创建容器 api 的示例。
另一种选择是使用 blob 存储 sdk ( https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-nodejs ) 但找不到使用托管创建容器的任何示例身份。
非常感谢任何使这项工作的指针。
谢谢,
解决方案
首先,您无法使用 managed identity 调用 Rest API。Authorization
header 需要授权方案、账户名和签名。
在 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
);
推荐阅读
- python - Tkinter 覆盖文本
- angular - Angular 11-TypeError:无法在“窗口”上执行“获取”:非法调用
- typescript - 在 npm 安装后手动将类型复制到 @types/ 目录
- c# - 无法将 DBNull 与 NULL 列值匹配
- mysql - Docker 提交数据库
- reporting-services - 如何在 SSRS REPORT 的搜索框中搜索多个“值”
- javascript - JavaScript 日期数组到日期范围数组
- karate - 空手道 - $ | 不是字符串 (LIST:STRING) 失败
- php - 创建子主题,未加载一些脚本和 css 文件
- html - 超链接不显示在带有 HTML 的 Outlook 2016 中