引言

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

思路

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

作者:JulianHuang

感谢您的认真阅读,如有问题请大胆斧正;觉得有用,请下方或加关注。

本文欢迎转载,但请保留此段声明,且在文章页面明显位置注明本文的作者及原文链接。

转载于:https://www.cnblogs.com/JulianHuang/p/10503600.html

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

  1. ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释

    ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释 原文:ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释 IdentityS ...

  2. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范

    原文:ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范 IdentityServer实现以下规范: OpenID Connect OpenID Connect ...

  3. Asp.Net Core基于JWT认证的数据接口网关Demo

    Asp.Net Core基于JWT认证的数据接口网关Demo 近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求 ...

  4. django python3会员中心_python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作...

    阅读目录 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate( ...

  5. WTM(ASP.NET Core)使用ASP.NET Core自带TagHelper显示模型验证消息

    WTM框架使用TagHelper提供了丰富的前端控件,目前框架只支持LayUI,后期会增加更多框架整体的运转并不依赖于LayUI,开发人员可以使用最普通的Html来编写页面,框架提供的控件只是简化编写 ...

  6. asp.net core 自带cookie验证authorize

    asp.core自带的身份验证中cookie是一个比较方便的身份验证工具,在单独的服务器中,该功能比较好用,但是自己在使用的过程中遇到较多问题,在对访问的aciton中添加[authorize]特性之 ...

  7. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期.这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 正文 今 ...

  8. ASP.NET Core的身份认证框架IdentityServer4--入门【转】

    原文地址 Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Cor ...

  9. 如何在 Asp.Net Core 实现 Excel 导出功能

    在web应用程序开发时,或许你会遇到这样的需求,如何在 Asp.Net Core 中实现 excel 或者 word 的导入导出,在 NuGet 上有大量的工具包可以实现这样的功能,本篇就讨论下如何使 ...

最新文章

  1. ShareEntryActivity java.lang.ClassNotFoundException | Android类找不到问题
  2. Toolbar中menu菜单文字颜色的修改
  3. OpenGL编程指南5:学习绘制不同风格的曲线
  4. 用Delphi实现Windows的鼠标钩子函数
  5. 无障碍开发(七)之实例讲解
  6. Oracle学习计划
  7. char类型和Unicode编码
  8. 怎么清理句柄_JAR文件句柄:混乱后清理!
  9. xml中的Document和Attribute
  10. kafka 分组消费topic_关于kafka更改消费者对应分组下的offset值
  11. DRBD安装编译后: modprobe drdb FATAL: Module drdb not found
  12. 网站api自己怎么写_网站建设及推广网站关键词优化自己怎么做网站推广
  13. SAP中质检检验计划导出实例
  14. mysql 字符串有有乱码 转码_mysql字符转化以及乱码原因
  15. 微信公众号群发接口和原创校验
  16. css3-pie,CSS3PIE
  17. Pandas---条件筛选与组合筛选
  18. 汉语与asc码互转最快的办法
  19. 密码算法测试向量——HMAC-SM3
  20. Java学习笔记----File类与IO流

热门文章

  1. 阿里巴巴国际站询盘是什么意思?如何提高询盘率
  2. js表单验证控制代码大全
  3. asp调用打开exe文件
  4. CentOS7修改主机名称
  5. BaseAdapter的一个简单案例
  6. 扫盲!Java可变长数组,看这篇就对了!
  7. 我是一个内向的人,也是一个不善交际的人
  8. 3种骚操作,教你查看 Java 字节码!
  9. 身为Java程序员,这些开源工具你一定要学会!
  10. 闲话高并发的那些神话,看京东架构师如何把它拉下神坛