C# - 在本机应用程序上将 Azure Key Vault 与 Azure 存储结合使用
C# - Using Azure Key Vault with Azure Storage on Native App
我正在使用以下代码上传到我的 Azure 存储帐户中的图像容器。 app.config中的连接字符串是:
<appSettings>
<add key="StorageConnectionString" value="MyConnectionString" />
</appSettings>
CloudStorageAccount storageAccount = CloudStorageAccount.Parse
CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("imagestorage");
// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("IMG1.png");
// Create or overwrite the "myblob" blob with contents from a local file.
using (var fileStream = System.IO.File.OpenRead(@"D:\Untitled.png"))
{
blockBlob.UploadFromStream(fileStream);
}
问题是如何将 Azure Key Vault 集成到我的本机应用程序中,以便我的 API 密钥不会被一些烦人的逆向工程师破坏?
我已经在 Azure Active Directory 中注册了我的应用程序并授予了 Azure Key Vault 的权限。
此外,任何尝试使用我的本机桌面应用程序的人都必须使用个人帐户登录到我的 ASP.NET Web API 应用程序并接收令牌,然后才能使用任何其他功能。我所有的控制器都需要授权。
我相信您想要做的是将您的 Azure KeyVault 与您的 C# 应用程序集成。您可以使用 2 API 执行此操作。一个是 Microsoft.Azure.KeyVault,另一个是 ADAL。
按照这些步骤可能会得到答案:
public async Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientID"], ConfigurationManager.AppSettings["ClientSecret"]);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
if(result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT Token");
}
Console.WriteLine("Retrieved Password");
return result.AccessToken;
}
然后通过 运行 获取您尝试 return 的值:
public async Task getvaluesAsync()
{
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SecretURI"]);
EncryptSecret = sec.Value;
}
将 ClientID、Client Secret 和 SecretURI 的适当值替换为您在 App.config 文件中的值。使用 getter 和 setter 方法与 "EcryptSecret" 做类似的事情,
public static string EncryptSecret { get; set; }
这将持续存储密码/数据库连接以供进一步使用。
一些有用的文章是:
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-developers-guide
我正在使用以下代码上传到我的 Azure 存储帐户中的图像容器。 app.config中的连接字符串是:
<appSettings>
<add key="StorageConnectionString" value="MyConnectionString" />
</appSettings>
CloudStorageAccount storageAccount = CloudStorageAccount.Parse
CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("imagestorage");
// Retrieve reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("IMG1.png");
// Create or overwrite the "myblob" blob with contents from a local file.
using (var fileStream = System.IO.File.OpenRead(@"D:\Untitled.png"))
{
blockBlob.UploadFromStream(fileStream);
}
问题是如何将 Azure Key Vault 集成到我的本机应用程序中,以便我的 API 密钥不会被一些烦人的逆向工程师破坏?
我已经在 Azure Active Directory 中注册了我的应用程序并授予了 Azure Key Vault 的权限。
此外,任何尝试使用我的本机桌面应用程序的人都必须使用个人帐户登录到我的 ASP.NET Web API 应用程序并接收令牌,然后才能使用任何其他功能。我所有的控制器都需要授权。
我相信您想要做的是将您的 Azure KeyVault 与您的 C# 应用程序集成。您可以使用 2 API 执行此操作。一个是 Microsoft.Azure.KeyVault,另一个是 ADAL。
按照这些步骤可能会得到答案:
public async Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientID"], ConfigurationManager.AppSettings["ClientSecret"]);
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
if(result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT Token");
}
Console.WriteLine("Retrieved Password");
return result.AccessToken;
}
然后通过 运行 获取您尝试 return 的值:
public async Task getvaluesAsync()
{
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
var sec = await kv.GetSecretAsync(ConfigurationManager.AppSettings["SecretURI"]);
EncryptSecret = sec.Value;
}
将 ClientID、Client Secret 和 SecretURI 的适当值替换为您在 App.config 文件中的值。使用 getter 和 setter 方法与 "EcryptSecret" 做类似的事情,
public static string EncryptSecret { get; set; }
这将持续存储密码/数据库连接以供进一步使用。
一些有用的文章是: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-developers-guide