ASP.NET Core 实现带认证功能的Web代理服务器
引言
最近在公司開發(fā)了一個項目,項目部署架構(gòu)圖如下:
思路
如圖中文本所述,公司大數(shù)據(jù)集群不允許直接訪問外網(wǎng),需要一個網(wǎng)關(guān)服務(wù)器代理請求,本處服務(wù)器A就是邊緣代理服務(wù)器的作用。
通常技術(shù)人員最快捷的思路是在服務(wù)器A上部署IIS+Application Request Routing Module組件,或者配置由Nginx代理請求完成此次邊緣代理服務(wù)器的功能。
但是由于本處代理服務(wù)器A 還需要完成額外的功能:
服務(wù)器A需要定時訪問外網(wǎng)云服務(wù)器將數(shù)據(jù)請求并保存到本地
代理服務(wù)器A集中管理云服務(wù)器B的基本身份認(rèn)證憑據(jù), 所以該代理服務(wù)器A在代理請求的時候需要發(fā)送認(rèn)證憑據(jù)
關(guān)于web服務(wù)器定時任務(wù)功能實踐,請參照技術(shù)博客;
關(guān)于基本身份認(rèn)證的編程實踐,請參照技術(shù)博客。
所以本處我們考慮利用ASP.NET Core實現(xiàn)一個帶認(rèn)證功能的代理服務(wù)器。
? ? 任務(wù)集中在2點:
-
實現(xiàn)代理請求
-
代理請求的時候攜帶 基本身份認(rèn)證憑據(jù)
?
編程實現(xiàn)
ASP.NET Core 提供了實現(xiàn)請求代理功能的功能庫 ,通過nuget安裝: Install-Package Microsoft.AspNetCore.Proxy -Version 0.2.0該中間件目前只有2個擴展方法,主要關(guān)注如下擴展方法:
// // 摘要: // Sends request to remote server as specified in options // // 參數(shù): // app: // // options: // Options for setting port, host, and scheme public static IApplicationBuilder RunProxy(this IApplicationBuilder app, ProxyOptions options);本次代理請求需要攜帶BA憑據(jù),所以可在ProxyOptions參數(shù)設(shè)定基本身份認(rèn)證Handler:
public void ConfigureServices(IServiceCollection services) {_remoteAccount = services.ConfigureOption<RemoteBasicAuth>(Configuration.GetSection("RemoteBasicAuth"));_proxyOption = services.ConfigureOption<ProxyOptions>(Configuration.GetSection("ProxyOptions"));// 從本地配置文件讀取云服務(wù)器B的認(rèn)證憑據(jù),并設(shè)置基本身份認(rèn)證Handler _proxyOption.BackChannelMessageHandler = new BasicAuthenticationClientHandler(_remoteAccount);...... }該云服務(wù)器B在部分頁面【url以/eqids開頭、api以/api/v1/eqids/】配置了BA認(rèn)證,
所以本次我們使用了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.? 以上程序部署到服務(wù)器A之后, 這樣訪問服務(wù)器A的部署網(wǎng)站, 等同于訪問云服務(wù)器B的資源,服務(wù)器B對于內(nèi)網(wǎng)來說是透明的。
? 本文期待以一種輕松、優(yōu)雅的方式快速實現(xiàn)一個具備自定義消息處理能力的Web代理服務(wù)器。
?
作者:JulianHuang感謝您的認(rèn)真閱讀,如有問題請大膽斧正;覺得有用,請下方或加關(guān)注。
本文歡迎轉(zhuǎn)載,但請保留此段聲明,且在文章頁面明顯位置注明本文的作者及原文鏈接。
轉(zhuǎn)載于:https://www.cnblogs.com/JulianHuang/p/10503600.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 实现带认证功能的Web代理服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql升级过程的问题
- 下一篇: java UDP