歡迎光臨
每天分享高質量文章

ASP.NET Core 實現帶認證功能的Web代理服務器

引言

  最近在公司開發了一個專案,專案部署架構圖如下:

思路

  如圖中文本所述,公司大資料集群不允許直接訪問外網,需要一個網關服務器代理請求,本處服務器A就是邊緣代理服務器的作用。

通常技術人員最快捷的思路是在服務器A上部署IIS+Application Request Routing Module組件,或者配置由Nginx代理請求完成此次邊緣代理服務器的功能。

但是由於本處代理服務器A 還需要完成額外的功能:

  1. 服務器A需要定時訪問外網雲服務器將資料請求並儲存到本地

  2. 代理服務器A集中管理雲服務器B的基本身份認證憑據, 所以該代理服務器A在代理請求的時候需要發送認證憑據

關於web服務器定時任務功能實踐,請參照技術博客;

關於基本身份認證的編程實踐,請參照技術博客。

所以本處我們考慮利用ASP.NET Core實現一個帶認證功能的代理服務器。

    任務集中在2點:

  • 實現代理請求

  • 代理請求的時候攜帶 基本身份認證憑據

編程實現

ASP.NET Core 提供了實現請求代理功能的功能庫 ,通過nuget安裝:

Install-Package Microsoft.AspNetCore.Proxy -Version 0.2.0

該中間件目前只有2個擴展方法,主要關註如下擴展方法:

//
// 摘要:
//     Sends request to remote server as specified in options
//
// 引數:
//   app:
//
//   options:
//     Options for setting port, host, and scheme
public static IApplicationBuilder RunProxy(this IApplicationBuilder app, ProxyOptions options);

本次代理請求需要攜帶BA憑據,所以可在ProxyOptions引數設定基本身份認證Handler:

 public void ConfigureServices(IServiceCollection services)
{
      _remoteAccount = services.ConfigureOption(Configuration.GetSection("RemoteBasicAuth"));
      _proxyOption = services.ConfigureOption(Configuration.GetSection("ProxyOptions"));
      //  從本地配置檔案讀取雲服務器B的認證憑據,並設置基本身份認證Handler
      _proxyOption.BackChannelMessageHandler = new BasicAuthenticationClientHandler(_remoteAccount);
      ......
}

該雲服務器B在部分頁面【url以/eqids開頭、api以/api/v1/eqids/】配置了BA認證,

所以本次我們使用了MapWhen條件中間件:

 public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IHostingEnvironment env, Microsoft.Extensions.Hosting.IApplicationLifetime appLifetime, ILoggerFactory loggerFactory)
 {
     ......
     app.MapWhen(x=>
                x.Request.Path.Value.StartsWith(@"/eqids", StringComparison.OrdinalIgnoreCase) ||
                x.Request.Path.Value.StartsWith(@"/api/v1/eqids", StringComparison.OrdinalIgnoreCase),
            builder => builder.RunProxy(_proxyOption));
      ......
 }

 That’s All.  以上程式部署到服務器A之後, 這樣訪問服務器A的部署網站, 等同於訪問雲服務器B的資源,服務器B對於內網來說是透明的

  本文期待以一種輕鬆、優雅的方式快速實現一個具備自定義訊息處理能力的Web代理服務器。

原文地址:https://www.cnblogs.com/mi12205599/p/10503600.html

已同步到看一看
赞(0)

分享創造快樂