Azure devops Key Vault适用于本地开发,但不适用于已部署的web应用程序

Azure devops Key Vault适用于本地开发,但不适用于已部署的web应用程序,azure-devops,azure-active-directory,azure-keyvault,azure-webapps,azure-managed-identity,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 在与开发、UAT和产品的web应用程序相同的资源组下创建密钥库 将所有四个应用程序都包含在

我已经在这方面工作了好几天了,在阅读了很多关于这方面的文档之后,我完全没有了主意

到目前为止我所做的:

  • 创建了三个web应用程序(DEV、UAT、PROD),并将分配给的系统切换为打开,以创建托管身份。这也注册了网站 将应用程序导入Azure Active Directory
  • 在Azure Active Directory中注册了一个应用程序,其中包括将URI重定向到UAT、DEV、Prod和本地URL
  • 在与开发、UAT和产品的web应用程序相同的资源组下创建密钥库
  • 将所有四个应用程序都包含在密钥库的访问策略中,并具有“获取”和“列出”权限
  • 应用程序服务验证设置为关闭(应用程序服务->验证/授权->关闭)。我们正在使用另一种用户身份验证方法
  • 完成此设置后,可以在localhost上访问密钥库,但不能在部署的环境中访问。我之所以这么认为,是因为它没有从密钥库检索连接字符串
  • 我已经阅读了这方面的各种文档,包括
  • 该项目是.NETFramework 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应用程序访问密钥库。

请确保您已更新了与本地应用程序相关的任何信息。例如,如果它在本地工作,但在发布时不工作,那么代码或门户中可能有对本地主机环境的引用,这需要更新到发布的环境中。有时,在应用程序注册中,用户会留下对本地主机URL的引用,而不会在其中和代码中添加已发布的网页URL


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

经过仔细调试后,我发现我的问题实际上是一个相对简单的问题。密钥库使用标识授予了我的web应用,但正是这个调用导致了我的问题:ConfigurationManager.ConnectionString[1].Name。目的是获取要提供给我的DBContext的ConnectionString的名称。结果表明,这并没有返回我在生产中预期的值。在对代码进行一些更改后,问题就解决了

当它在web应用程序中运行时会出现什么错误?太好了,你可以解决它!