引言

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

思路

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

该中间件目前只有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代理服务器。

作者:Julian_酱

感谢您的认真阅读,如有问题请大胆斧正,如果您觉得本文对你有用,不妨右下角点个或加关注。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置注明本文的作者及原文链接,否则保留追究法律责任的权利。

ASP.NET Core 实现带认证功能的Web代理服务器的更多相关文章

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

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

  2. asp.net core 2.1认证

    asp.net core 2.1认证 这篇文章基于asp.net core的CookieAuthenticationHandler来讲述. 认证和授权很相似,他们的英文也很相似,一个是Authenti ...

  3. ASP.NET Core的身份认证框架IdentityServer4--入门

    ASP.NET Core的身份认证框架IdentityServer4--入门 2018年08月11日 10:09:00 qq_42606051 阅读数 4002   https://blog.csdn ...

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

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

  5. Vue.js与 ASP.NET Core 服务端渲染功能整合

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  6. ASP.NET Core 2.2 基础知识(十) Web服务器 - Kestrel

    ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...

  7. ASP.NET Core 2.0 新功能汇总

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

  8. asp.net core 登录身份认证(Cookie)

    asp.net core 2最简单的登录功能 源代码在此 创建asp.net core Web Mvc项目 配置下选项 项目目录结构 在Models文件夹下新建两个实体类 public class T ...

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

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

随机推荐

  1. Ocelot中文文档-日志

    目前,Ocelot使用标准的日志记录接口ILoggerFactory/ILogger . 在IOcelotLogger / IOcelotLoggerFactory中提供了标准的asp.net cor ...

  2. Heap

    #include using namespace std; int heap[100010],cnt=0; void put(int x) { cnt++; heap[cnt]=x; int now= ...

  3. unity做游戏常用功能实现(一)多方向同时输入也能让物体正常移动

    -------小基原创,转载请给我一个面子 网上有很多讲输入控制如何移动,但是多数都是讲单一按下,对于同时按下2个或2个以上按键并没有说明怎么解决,这里小基研究了一下方便大家 (如果你直接写input ...

  4. var $this = $(this)是什么意思?

    var $this = $(this) 声明一个变量,$this 是变量名,加$说明是jquery对象. 给声明的变量赋值,赋的值是将this元素转换为jQuery对象.

  5. RSAC 2018:人工智能成为驱动网络安全的新 “引擎”

    作为全球顶级的权威安全会议,RSA已成为快速了解世界安全趋势的风向标,更是影响安全产业转型与持续发展的重要平台.不同于往年人工智能(AI)在安全领域更多的是一种理论探讨,今年看到的是大量人工智能在安全 ...

  6. Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧

    一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...

  7. Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析

    1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...

  8. win10装ubuntu双系统

    由于在win下进行web开发出现各种问题相当头疼. 所以今天折腾了一天想装个ubuntu,查看了网上好多教程,不得不说,网上的人很多都是不负责任的,教程都是过时根本就不负责任,关键的地方一笔带过,简单 ...

  9. 终于解决文件格式问题 unix格式

    关于这个问题,今天终于找到方法  file-setting下 左侧code style  line separator下拉选择unix就可以了 http://www.cnblogs.com/sunfa ...

  10. 云计算一:VMware workstation的安装和使用教程

    VMware workstation的安装和使用教程 一.VMware 安装 1.从网上找到VMware的安装包以及要安装的映像文件,下载到本地,然后备份一份存储到百度云盘. 链接:http://pa ...