sách gpt4 ai đã đi

c# - "HTTP Error 502.5 - Process Failure"使用 ASP.NET Core 2.1 WebAPI 访问 Azure PaaS 中的 Azure Key Vault

In lại 作者:行者123 更新时间:2023-11-30 22:57:29 29 4
mua khóa gpt4 Nike

尝试使用托管服务身份访问 Azure Key Vault 时,我收到错误“HTTP 错误 502.5 - 进程失败”/“操作返回无效状态代码“禁止””。在 Visual Studio 中调试时,但在发布到 Azure Web 应用程序时,它会返回 502.5 错误。

我怀疑它与 Azure Key Vault 的权限有关。因为我可以在 Visual Studio 中本地运行它(并且它是一个新的 Key Vault) - 我知道我有权限。我不确定 Web 应用程序在 Azure 中运行的用户是什么,并怀疑 Web 应用程序需要访问 key 保管库,但我希望通过启用“托管服务身份”来处理此问题。

如何正确配置我的应用程序以使用托管服务身份访问 key 保管库?

重现步骤:

  1. 在 Azure 门户中创建新的资源组
  2. 创建 Azure Key Vault(我将其称为“mytestkeyvault”)。添加两个 secret , secret 1, secret 2,在其中添加一些东西(我使用这个Azure CLI脚本添加你好/再见)

    az keyvault secret set --vault-name 'mytestkeyvault' --name 'Secret1' --value 'Hello'
    az keyvault secret set --vault-name 'mytestkeyvault' --name 'Secret2' --value 'Goodbye'
  3. 在 Azure 中创建 Web 应用。 启用托管服务身份.

  4. 创建一个新的 ASP.NET Core 2.1 WebAPI(我将其命名为“MyKeyVaultTest.Service”)。
  5. 添加 NuGet 包:

    • AspNetCore.KeyVault
    • Microsoft.Azure.Services.AppAuthentication
  6. 编辑 appsettings.json 文件以添加 Key Vault URL:

    {
    "Logging": {
    "LogLevel": {
    "Default": "Warning"
    }
    },
    "AllowedHosts": "*",
    "AppSettings": {
    "KeyVaultURL": "https://mytestkeyvault.vault.azure.net/"
    }
    }
  7. 在program.cs文件中,进行如下编辑,以连接到appsettings.json并连接到keyvault:

    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Logging;

    namespace MyKeyVaultTest.Service
    {
    public class Program
    {
    public static void Main(string[] args)
    {
    CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, config) =>
    {
    IConfigurationRoot builtConfig = config.Build();
    ConfigurationBuilder keyVaultConfigBuilder = new ConfigurationBuilder();
    keyVaultConfigBuilder.AddAzureKeyVault(builtConfig["AppSettings:KeyVaultURL"]);
    IConfigurationRoot keyVaultConfig = keyVaultConfigBuilder.Build();
    config.AddConfiguration(keyVaultConfig);
    })
    .UseStartup();
    }
    }
  8. 在值 Controller 中,编辑如下:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using System.Collections.Generic;

    namespace MyKeyVaultTest.Service.Controllers
    {
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
    private readonly IConfiguration _configuration;

    public ValuesController(IConfiguration configuration)
    {
    _configuration = configuration;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<>> Get()
    {
    string secret1 = _configuration["Secret1"];
    string secret2 = _configuration["Secret2"];

    return new string[] { secret1, secret2 };
    }
    }
    }
  9. 在 Visual Studio 中运行 - 请注意,values api 返回我们期望的结果:

    ["Hello","Goodbye"]
  10. 将项目发布到 Azure。请注意,它不起作用并返回:

    HTTP 错误 502.5 - 进程失败

    完整的错误堆栈:

    Description: The process was terminated due to an unhandled exception.
    Exception Info: Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Forbidden'
    at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
    at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, CancellationToken cancellationToken)
    at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.LoadAsync()
    at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.Load()
    at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
    at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
    at MyKeyVaultTest.Service.Program.<>c.<CreateWebHostBuilder>b__1_0(WebHostBuilderContext context, IConfigurationBuilder config) in D:\a\1\s\MyKeyVaultTest\MyKeyVaultTest.Service\Program.cs:line 27
    at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
    at MyKeyVaultTest.Service.Program.Main(String[] args) in D:\a\1\s\MyKeyVaultTest\MyKeyVaultTest.Service\Program.cs:line 17

1 Câu trả lời

在 Web 应用程序中启用托管服务标识会创建一个在 Azure 中使用的标识。您仍然需要授予该身份对 Key Vault 的必要权限。

在 Web 应用程序中启用 MSI 后,它将显示为可以在 Key Vault 权限配置中分配权限的用户。

关于c# - "HTTP Error 502.5 - Process Failure"使用 ASP.NET Core 2.1 WebAPI 访问 Azure PaaS 中的 Azure Key Vault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638203/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com