微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 C#.net 使用 Azure 服务主体名称 (SPN) 从 Azure 服务Azure blob 存储获取文件?

如何解决如何使用 C#.net 使用 Azure 服务主体名称 (SPN) 从 Azure 服务Azure blob 存储获取文件?

一般来说,我想使用 C#.net 从 Azure blob 存储帐户获取文件,并且我有一个 SPN 名称。 我尝试了以下方法

注意:这里的身份验证密钥存储在 KEY Vault 和 Azure 管理员中 仅向我们提供 SPN 名称

方式一:

private static async Task<string> GetAccesstoken()
string accesstoken = "";
            try
            {
                var authContext = new AuthenticationContext($"https://login.windows.net/{TenantID}");
                var credential = new ClientCredential("{ClientID}","{SPN Name}");
                var result = await authContext.AcquiretokenAsync("https://storage.azure.com",credential);

                if (result == null)
                {
                    throw new Exception("Failed to authenticate via ADAL");
                }
                accesstoken = result.Accesstoken;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("Exception for get Blob container" + ex.Message.ToString());
            }

方式 2:

private static async Task<string> GetAccesstoken()
 var servicetokenProvider = new AzureServicetokenProvider();

            var keyvaultClient = new keyvaultClient(new keyvaultClient.AuthenticationCallback(servicetokenProvider.keyvaultTokenCallback));
          
            SecretBundle secretValue = null;
            try
            {
                secretValue = await keyvaultClient.GetSecretAsync("{keyvault URI}",{SPN_Name});
            }
            catch (Exception kex)
            {
                System.Diagnostics.Trace.WriteLine("Exception for get Blob container" + kex.Message.ToString());
            }
           return secretValue.Value;

以下代码从 Azure 存储访问文件

public static async Task<List<IListBlobItem>> GetBlobContainer( string containerName)
        var token = await GetAccesstoken();
                TokenCredential tokenCredential = new TokenCredential(token);
        //here i am getting all one day file
                DateTime date = DateTime.Now;
                date = date.AddDays(-1);
               
                StorageCredentials _objectCrentials = new StorageCredentials(tokenCredential);

                CloudBlobClient blobClient = new CloudBlobClient(new Uri($"{Storage Account URI}"),_objectCrentials);
                // container
                CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
                IEnumerable<IListBlobItem> listofBlob = blobContainer.ListBlobs().OfType<CloudBlob>()
                   .OrderByDescending(b => b.Properties.LastModified > date);
                //check her do you get any list
                _list = listofBlob.ToList();

方式 2 出现了这个错误

参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/{tenantID}。异常消息:尝试了 遵循 3 种方法获取访问令牌,但没有一种方法有效。 参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/{tenantID}。异常消息:试图获取 使用托管服务标识的令牌。无法连接到 实例元数据服务 (Imds)。跳过对托管的请求 服务身份 (MSI) 令牌端点。参数: 连接字符串: [未指定连接字符串],资源:https://vault.azure.net, 权限:https://login.windows.net/{tenantID}。异常消息: 尝试使用 Visual Studio 获取令牌。访问令牌不能 获得。 Visual Studio 令牌提供程序的异常 Microsoft.Asal.TokenService.exe:TS003:错误,TS005:无帐户 成立。请转到“工具”->“选项”->“Azure 服务身份验证”,然后 添加一个帐户以在期间对 Azure 服务进行身份验证 发展。

参数:连接字符串:[未指定连接字符串], 资源:https://vault.azure.net,权限: https://login.windows.net/{tenantID}。异常消息:试图获取 令牌使用 Azure CLI。无法获取访问令牌。 'az' 不是 被识别为内部或外部命令、可运行的程序或 批处理文件

如果步骤错误,请纠正我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。