从 x++ 访问 azure blob 以通过托管身份上传文件

问题描述 投票:0回答:1

我们使用此链接和其他链接通过SAS令牌将文件从x++上传到azure blob。然而,我们希望通过托管身份实现相同的目标,因为内部安全禁止使用密钥。我知道这涉及到

  1. 注册Appid
  2. 作为应用程序 ID 的数据贡献者/数据所有者角色提供对 Blob 存储的 IAM 访问权限。
  3. 在x++中根据tenantid、appid、secret、scope生成访问令牌
  4. 利用访问令牌将文件上传到 azure blob。

我无法通过 x++ 代码实现步骤 4。请提供帮助并建议任何替代的 OOB 解决方案(如果适用)。

谢谢。

azure x++ dynamics-365-operations
1个回答
0
投票

最初,我注册了一个应用程序并在其中授予了 Storage API 权限,如下所示:

enter image description here

在存储帐户下,我向上述应用程序添加了 “存储 Blob 数据贡献者” 角色,如下所示:

enter image description here

就我而言,我使用以下示例 C# 代码将文件上传到 Azure 存储帐户:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

namespace AzureBlobUploadApp
{
    class Program
    {
        private static async Task Main(string[] args)
        {
            string tenantId = "tenantId";
            string clientId = "appId";
            string clientSecret = "secret";
            string storageAccountName = "sridemostor1411";
            string containerName = "sri";
            string blobName = "logo.jpg";
            string filePath = "C:\\test\\logo.jpg";

            var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
            await UploadFileToBlobAsync(storageAccountName, containerName, blobName, filePath, credential);
        }

        private static async Task UploadFileToBlobAsync(string storageAccountName, string containerName, string blobName, string filePath, ClientSecretCredential credential)
        {
            string blobUri = $"https://{storageAccountName}.blob.core.windows.net/{containerName}/{blobName}";
            var blobClient = new BlobClient(new Uri(blobUri), credential);

            using FileStream fileStream = File.OpenRead(filePath);
            await blobClient.UploadAsync(fileStream, new BlobHttpHeaders { ContentType = "application/octet-stream" });

            Console.WriteLine("File uploaded successfully!");
        }
    }
}

回复:

enter image description here

为了确认,我在 Azure 门户中检查了相同的内容,其中文件已成功上传,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.