【问题标题】:How to access key vault secret from .net code hosted on IIS如何从托管在 IIS 上的 .net 代码访问密钥保管库机密
【发布时间】:2018-08-27 17:41:24
【问题描述】:

我有一个场景:

  1. 在 Azure 中使用机密创建 Key Vault。
  2. 在代码中访问这个秘密。

    1. 代码在本地运行(使用 Azure CLI 测试)
    2. Azure 应用服务中托管的应用程序(启用 MSI)工作正常。
    3. 我们需要在 Azure VM(启用 MSI)IIS 服务器上托管相同的应用程序 - 不工作

我想要以上几点的解决方案和建议(最后一点)

访问 Key Vault Secret 值的代码

     var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            ConfigurationApp.ClientId = keyVaultClient.GetSecretAsync("https://test.vault.azure.net/", "testid").Result.Value;

关注这篇文章 - https://kasunkodagoda.com/2018/04/28/allow-application-running-on-an-azure-virtual-machine-to-access-azure-key-vault-using-managed-service-identity/

https://azure.microsoft.com/en-us/resources/samples/app-service-msi-keyvault-dotnet/

【问题讨论】:

  • 你能描述一下“不工作”吗?你有错误吗?
  • 请分享您的错误描述。此外,您所指的博客已过时,Microsoft 发布了一种从 azure keyvault 访问机密的新方法。我已经在这个article 中描述过
  • 我没有收到任何错误,只是秘密值返回 null。已检查密钥保管库上可用的秘密值。 @RonBeyer
  • @RonBeyer 我们需要在 Azure VM-IIS 服务器上托管应用程序。在那种情况下,我无法使用上面的代码检索秘密值
  • @Jayendran 是的,我已经使用连接服务选项来获取秘密值。但我们的要求是在 Azure VM IIS 上托管 app/.net 代码。

标签: c# azure iis azure-keyvault


【解决方案1】:

我已经解决了我的问题:从托管在 Azure VM IIS 上的 .net 代码访问密钥库机密

  public async Task getAppconfiguration2()
    {
        string URI = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net";
        Uri uri = new Uri(String.Format(URI));
        HttpClient _client = new HttpClient();
        _client.DefaultRequestHeaders.Add("Metadata", "true");
        HttpRequestMessage request = new HttpRequestMessage
        {
            // Content = new StringContent(body, Encoding.UTF8, "application/json"),
            Method = HttpMethod.Get,
            RequestUri = new Uri(URI)
        };


        var res = await _client.SendAsync(request);
        var content = res.Content.ReadAsStringAsync();
        JObject token = JsonConvert.DeserializeObject<JObject>(content.Result.ToString());
        string token1 = token["access_token"].ToString();
        ConfigurationApp.Encyptionkey = token1.ToString();

        HttpClient _client1 = new HttpClient();
        _client1.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token1);
        HttpRequestMessage request1 = new HttpRequestMessage
        {

            Method = HttpMethod.Get,
            RequestUri = new Uri("https://test.vault.azure.net/secrets/clientid?api-version=2016-10-01")
        };


        var rs = _client1.SendAsync(request1);
        var rk = rs.Result.Content.ReadAsStringAsync();
        JObject clientjson = JsonConvert.DeserializeObject<JObject>(rk.Result.ToString());
        ConfigurationApp.ClientId = clientjson["value"].ToString();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2016-10-13
    • 2021-11-14
    • 2020-12-28
    相关资源
    最近更新 更多