azure-devops - Key Vault 适用于本地开发,但不适用于已部署的 Web 应用程序
问题描述
我已经为此工作了几天,在阅读了许多关于此的文档后,我完全没有想法。
到目前为止我所做的:
- 创建了三个 Web 应用程序(DEV、UAT、PROD)并将 System Assigned 切换为 ON 以创建托管身份。这还将 Web 应用程序注册到 Azure Active Directory。
- 在 Azure Active Directory 中注册了一个应用程序,其中包括指向 UAT、DEV、Prod 和本地 URL 的重定向 URI。
- 在与 DEV、UAT、PROD 的 Web 应用程序相同的资源组下创建 Key Vault。
- 在具有 GET 和 LIST 权限的 Key Vault 的访问策略中包含所有四个应用程序。
- 应用服务身份验证设置为关闭(应用服务 -> 身份验证/授权 -> 关闭)。我们正在使用另一种用户身份验证方式。
- 完成此设置后,可以在 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; }
请让我知道我错过了什么阻止我的网络应用程序访问密钥保管库。
解决方案
经过一番仔细调试,我发现我的问题其实是一个比较简单的问题。Key Vault 使用这些身份授予了我的 Web 应用程序,但正是这个特定的调用导致了我的问题:ConfigurationManager.ConnectionStrings[1].Name。目的是获取连接字符串的名称以输入我的 DBContext。事实证明,这并没有返回我在生产中所期望的值。修改代码后,问题解决了!
推荐阅读
- twitter-bootstrap - 如何在我自己的自定义 SASS 类中混合 Twitter Bootstrap 实用程序类?
- php - 在 Laravel 中加入多个条件
- java - 单击按钮后如何加载下一组元素
- cordova - 如何使用 Cordova for iOS 禁用蓝牙功能以避免丢失 NSBluetoothAlwaysUsageDescription 的错误
- typescript - 使用Typescript的keyof获取对应类型?
- apache-spark - 我的大数据框架设置是否完整,还是我错过了一些重要的东西?
- ios - 如何在 iOS 13 中创建带有麦克风图标的搜索栏?
- r - 如何在 R 中编写循环?
- magento - 404 错误:找不到页面。(Magento 2 全新安装 ubuntu 18)
- google-app-engine - 本地环境中的 gcloud、python 3、app.yaml 没有