C# - 在Native App上使用Azure Key Vault和Azure存储

时间:2017-04-07 15:37:31

标签: c# asp.net azure

我使用以下代码上传到我的Azure storange帐户中的图像容器。 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应用程序并在使用任何其他功能之前接收令牌。我的所有控制器都需要授权。

1 个答案:

答案 0 :(得分:0)

我相信您尝试做的是将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;
}

然后通过运行这个来获取您尝试返回的内容的价值:

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文件中的值。使用&#34; EcryptSecret&#34;使用getter和setter方法。做类似的事情,

public static string EncryptSecret { get; set; }

这将持续存储密码/数据库连接以供进一步使用。

一些有用的文章将是: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-developers-guide