Key Vault适用于本地开发,但不适用于已部署的Web应用

时间:2019-12-07 07:43:21

标签: azure-devops azure-active-directory azure-keyvault azure-webapps azure-managed-identity

我已经为此工作了几天,在阅读了许多关于此的文档后,我完全没有想法。

到目前为止我所做的:

  • 创建了三个Web应用程序(DEV,UAT,PROD),并将“系统分配”切换为“开”以创建托管身份。这也注册了网络 应用程序到Azure Active Directory中。
  • 在Azure Active Directory中注册了一个应用程序,其中包括将URI重定向到UAT,DEV,Prod和本地URL。
  • 在与DEV,UAT,PROD的Web应用程序相同的资源组下创建了Key Vault。
  • 在具有GET和LIST权限的密钥库的访问策略中包括所有四个应用程序。
  • 应用程序服务身份验证设置为关闭(应用程序服务->身份验证/授权->关闭)。我们正在使用另一种用户身份验证方法。
  • 完成此设置后,可以在localhost上访问密钥保管库,但不能在已部署的环境上访问。我之所以这么认为,是因为它没有从密钥库中检索connectionString。
  • 我已经使用了各种文档,包括https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication
  • 项目是.Net Framework 4.7.2

  • 在代码中,我拥有本地检索的机密,但未在部署时检索:

     public static string GetSecret(string SecretName, string vaultURL)
    {
        var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
        return keyVaultClient.GetSecretAsync(vaultURL, SecretName).Result.Value;
    }
    

请让我知道我所缺少的是什么导致我的Web应用程序无法访问密钥库。

2 个答案:

答案 0 :(得分:0)

确保已更新所有与本地应用程序特别相关的信息。例如,如果它在本地运行而在发布时不起作用,则可能在代码或门户中存在对localhost环境的引用,并且需要将其更新为发布的环境。有时,在应用程序注册中,人们会留下对本地主机URL的引用,而不在此处和代码中添加已发布的网页URL。

另外,请分享您收到的错误。

答案 1 :(得分:0)

经过仔细的调试,我发现我的问题实际上是一个相对简单的问题。密钥保险库使用身份向我的Web应用授予了权限,但这是导致我出现问题的特定调用:ConfigurationManager.ConnectionStrings [1] .Name。目的是获得要输入到我的DBContext中的connectionStrings的名称。原来,这没有返回我在生产中期望的值。经过一些代码更改,问题就解决了!