通常,我想使用 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());
}
方式二:
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' 不是内部或外部命令、可运行程序或批处理文件。
如果遵循错误的步骤,请纠正我。