日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 实现带认证功能的Web代理服务器

發布時間:2025/3/21 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 实现带认证功能的Web代理服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

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

思路

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

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

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

  • 服務器A需要定時訪問外網云服務器將數據請求并保存到本地

  • 代理服務器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<RemoteBasicAuth>(Configuration.GetSection("RemoteBasicAuth"));_proxyOption = services.ConfigureOption<ProxyOptions>(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代理服務器。

    ?

    作者:JulianHuang

    感謝您的認真閱讀,如有問題請大膽斧正;覺得有用,請下方或加關注。

    本文歡迎轉載,但請保留此段聲明,且在文章頁面明顯位置注明本文的作者及原文鏈接。

    轉載于:https://www.cnblogs.com/JulianHuang/p/10503600.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的ASP.NET Core 实现带认证功能的Web代理服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。