加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

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

发布时间:2022-10-17 12:42:46 所属栏目:Asp教程 来源:
导读:  思路

  文本所述,公司大数据集群不允许直接访问外网,需要一个网关服务器代理请求,本处服务器A就是边缘代理服务器的作用。

  通常技术人员最快捷的思路是在服务器A上部署IIS+ApplicationRequestRo
  思路
 
  文本所述,公司大数据集群不允许直接访问外网,需要一个网关服务器代理请求,本处服务器A就是边缘代理服务器的作用。
 
  通常技术人员最快捷的思路是在服务器A上部署IIS+ApplicationRequestRoutingModule组件,或者配置由Nginx代理请求完成此次边缘代理服务器的功能。
 
  但是由于本处代理服务器A还需要完成额外的功能:
 
  服务器A需要定时访问外网云服务器将数据请求并保存到本地
 
  代理服务器A集中管理云服务器B的基本身份认证凭据,所以该代理服务器A在代理请求的时候需要发送认证凭据
 
  关于web服务器定时任务功能实践asp服务器,请参照技术博客;
 
  关于基本身份认证的编程实践,请参照技术博客。
 
  所以本处我们考虑利用ASP.NETCore实现一个带认证功能的代理服务器。
 
  任务集中在2点:
 
  编程实现
 
  ASP.NETCore提供了实现请求代理功能的功能库,通过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代理服务器。
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!