c# - VM 上的 Azure Key Vault 访问引发 OAuth 异常 : The ClientId option must be provided

标签 c# azure asp.net-core-mvc azure-keyvault

我正在尝试向在 Azure 中的 VM 上运行的 .Net Core 应用添加 Azure Key Vault 访问权限。我觉得这应该是一个简单的场景,但是当应用程序启动时我遇到了麻烦。似乎有些东西配置不正确,或者可能是我使用了错误的依赖项。

VM 在 Azure 中运行,具有系统分配的托管标识,并且具有对 key 保管库的获取/列出访问权限。该应用程序是一个 .Net core 3 MVC 应用程序,我正在尝试从 key 保管库加载配置。

当应用程序启动时,应用程序窗口日志中会显示一系列三个错误。它们看起来都像:

System.ArgumentException: The 'ClientId' option must be provided. (Parameter 'ClientId')<br/> at Microsoft.AspNetCore.Authentication.OAuth.OAuthOptions.Validate()<br/> at Microsoft.AspNetCore.Authentication.RemoteAuthenticationOptions.Validate(String scheme)<br/> at Microsoft.AspNetCore.Authentication.AuthenticationBuilder.<>c__DisplayClass4_0'2.<AddSchemeHelper>b__1(TOptions o)

我在代码中尝试了一些不同的操作,但仍然遇到相同的错误。这是在 Program.cs 文件中,为了简洁起见,我删除了环境检查。

      public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                    var builtConfig = config.Build();
                    var azureServiceTokenProvider = new AzureServiceTokenProvider();
                    var keyVaultClient = new KeyVaultClient(
                        new KeyVaultClient.AuthenticationCallback(
                            azureServiceTokenProvider.KeyVaultTokenCallback));

                    config.AddAzureKeyVault(
                        $"https://{builtConfig[keyVaultEnvironmentConfigName]}.vault.azure.net/",
                        keyVaultClient,
                        new DefaultKeyVaultSecretManager());
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

有什么想法吗?谢谢!

最佳答案

可能有两件事出了问题。

  1. 其中一个位于您的 appsetting.json 或 appsetting.Production.json (如果您要覆盖的话)应该具有如下所述的正确值 { "keyVaultEnvironmentConfigName": "您的 key 保管库名称" } 注意:如果您在本地运行,除非您在 AD 中注册了 lo​​calhost url,否则它将无法工作。因为在 Azure 门户中您已经配置了 WebAPP url,所以本地运行对于相同的 clientid 不起作用。
  2. 如果上述配置键名称和值正确,则托管身份配置不正确。

注意:如上所述,如果您在本地环境中运行,请确保在 Azure AD 中添加 localhost url 或在 DevMode 中绕过 KeyVault。

关于c# - VM 上的 Azure Key Vault 访问引发 OAuth 异常 : The ClientId option must be provided,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718032/

相关文章:

azure - 如何在 SPA Nuxt Web 应用程序中访问客户端的 Azure 应用程序设置

azure - NCQRS 和 Lokad.CQRS 之间的差异

.net - 您是否需要 2 个 Azure 网站实例来实现 Web 角色等 SLA?

服务结构上托管的ASP.Net核心项目无法启动

c# - 虚拟化统一网格

c# - 如何安全地附加到 ProcessStartInfo.EnvironmentVariables ["PATH"]

c# - 如何使用InputSimulator模拟远程桌面上的特定按键?

debugging - VS 2015 Update 2 - 调试时变量不存在,为什么?

asp.net-mvc - 在 Visual Studio 2015 中的 ASP.NET MVC 5 项目上使用 Grunt

c# - 检查字符串是否包含日期