远程应用设置

在某些增量升级方案中,新 ASP.NET Core 应用能够与原始 ASP.NET 应用通信非常有用。

具体而言,此功能目前用于远程应用身份验证远程会话功能。

配置

要使 ASP.NET Core 应用能够与 ASP.NET 应用通信,必须对每个应用进行一些小更改。

ASP.NET 应用配置

要将 ASP.NET 应用设置为能够接收来自 ASP.NET Core 应用的请求,请执行以下操作:

  1. 安装 NuGet 包 Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices
  2. ISystemWebAdapterBuilder 上调用 AddRemoteAppServer 扩展方法:
SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
    .AddRemoteAppServer(options =>
    {
        // ApiKey is a string representing a GUID
        options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"];
    });

在传递到 AddRemoteAppServer 调用的选项配置方法中,必须指定 API 密钥。 API 密钥为:

  • 用于保护终结点,以便只有受信任的调用方才能向终结点发出请求。
  • 配置时提供给 ASP.NET Core 应用的相同 API 密钥。
  • 字符串且必须可剖析为 GUID。 密钥中的连字符是可选的。
  1. 可选:将 SystemWebAdapterModule 模块添加到 web.config(如果尚未由 NuGet 添加)。 对 ASP.NET Core 使用 SDK 样式项目时,不会自动添加 SystemWebAdapterModule 模块。
  <system.webServer>
    <modules>
+      <remove name="SystemWebAdapterModule" />
+      <add name="SystemWebAdapterModule" type="Microsoft.AspNetCore.SystemWebAdapters.SystemWebAdapterModule, Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices" preCondition="managedHandler" />
    </modules>
</system.webServer>

ASP.NET Core 应用

要将 ASP.NET Core 应用设置为能够向 ASP.NET 应用发送请求,需要进行类似的更改,在向 AddSystemWebAdapters 注册 System.Web 适配器服务后调用 AddRemoteApp

builder.Services.AddSystemWebAdapters()
    .AddRemoteAppClient(options =>
    {
        options.RemoteAppUrl = new(builder.Configuration["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);
        options.ApiKey = builder.Configuration["RemoteAppApiKey"];
    });

在上述代码中:

  • AddRemoteApp 调用用于配置远程应用的 URL 和共享机密 API 密钥。
  • RemoteAppUrl 属性指定 ASP.NET Core 应用与之通信的 ASP.NET Framework 应用的 URL。 在此示例中,从 YARP 代理使用的现有配置设置读取 URL,该设置代理将请求作为增量迁移的 扼杀器 fig 模式的一部分通过代理发送到 ASP.NET Framework 应用。

更新 ASP.NET 和 ASP.NET Core 应用后,扩展方法现在可用于根据需要设置远程应用身份验证远程会话

保护远程应用连接

由于远程应用功能涉及处理来自 ASP.NET 应用的新终结点上的请求,因此与 ASP.NET 应用的通信必须安全。

首先,确保用于通过 ASP.NET 应用对 ASP.NET Core 应用进行身份验证的 API 密钥字符串是唯一的,并保密。 最佳做法是不要将 API 密钥存储在源代码管理中。 而是在运行时从安全源(例如 Azure Key Vault 或其他安全运行时配置)加载它。 为了鼓励保护 API 密钥安全,远程应用连接要求密钥是非空 GUID(128 位十六进制数字)。

其次,由于 ASP.NET Core 应用必须能够信任它正在从正确的 ASP.NET 应用请求信息,因此 ASP.NET 应用应在任何生产方案中使用 HTTPS,以便 ASP.NET Core 应用能够知道响应是由受信任的源提供的。