• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

引言

  最近在公司开发了一个项目,项目部署架构图如下:

思路

  如图中文本所述,公司大数据集群不允许直接访问外网,需要一个网关服务器代理请求,本处服务器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<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代理服务器。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap