asp.netcore实现带认证功能的web代理服务器(代码片段)

lonelyxmas lonelyxmas     2022-12-05     258

关键词:

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

引言

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

技术图片

思路

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

asp.netcore搭载envoy实现grpc服务代理

...核心的微服务架构的过程中,博主曾经写过一篇名为ASP.NETCoregRPC打通前端世界的尝试的文章,主要是希望打通gRPC和前端这样两个异次元世界,因为无论我们构建出怎样高大上的微服务架构,最终落地的时候,我们还是要面对当... 查看详情

asp.netcore搭载envoy实现grpc服务代理

...核心的微服务架构的过程中,博主曾经写过一篇名为ASP.NETCoregRPC打通前端世界的尝试的文章,主要是希望打通gRPC和前端这样两个异次元世界,因为无论我们构建出怎样高大上的微服务架构,最终落地的时候,我们还是要面对当... 查看详情

netcore体系-web应用程序-4asp.netcore2.0项目实战-13基于onactionexecuting全局过滤器,页面操作权限过滤控制到按钮级(代码片段)

...理  权限管理的基本定义:百度百科。  基于《Asp.NetCore2.0项目实战(10)基于cookie登录授权认证并实现前台会员、后台管理员同时登录》我们做过了登录认证,登录是权限的最基础的认证,没有登录就没有接下来的各种操... 查看详情

asp.netcore实现随处可见的基本身份认证(代码片段)

原文:ASP.NETCore实现随处可见的基本身份认证 概览    在HTTP中,基本认证(Basicaccessauthentication,简称BA认证)是一种用来允许网页浏览器或其他客户端程序在请求资源时提供用户名和口令形式的身份凭证的一种... 查看详情

如何在asp.netcore中实现一个基础的身份认证

...的代码示例下载地址> HowtoachieveabasicauthorizationinASP.NETCore如何在ASP.NETCore中实现一个基础的身份认证ASP.NET终于可以跨平台了,但是不是我们常用的ASP.NET,而是叫一个ASP.NETCore的新平台,他可以跨Windows,Linux,OSX等平台来部署你的... 查看详情

asp.netcore管道深度剖析:采用管道处理http请求

之所以称ASP.NETCore是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求。ASP.NETCore应用的很多特性,比如路由、认证、会话、缓存等,也同时定制消息处... 查看详情

core身份认证

...的代码示例下载地址> HowtoachieveabasicauthorizationinASP.NETCore如何在ASP.NETCore中实现一个基础的身份认证ASP.NET终于可以跨平台了,但是不是我们常用的ASP.NET,而是叫一个ASP.NETCore的新平台,他可以跨Windows,Linux,OSX等平台来部署你的... 查看详情

详解asp.netcore2.1+的视图缓存(响应缓存)(代码片段)

...("yyyy年MM月dd日HH时mm分ss秒");ViewBag.time=time;returnView();在Asp.Netcore2.1中,官方文档上称:响应缓存可减少客户端或代理对web服务器的请求数。响应缓存还可减少量工作的web服务器执行程序生成响应。响应缓存由标头,指定你希望客... 查看详情

asp.netcore搭载envoy实现微服务的反向代理(代码片段)

本文内容走近EnvoyEnvoy配置文件侦听器(Listeners)过滤器(Filters)集群(Clusters)负载均衡(LoadAssignment)管理(Admin)服务编排本文小结参考文档话说,博主第一次接触到Envoy,其实是在微软的示例项目eShopOnContainers,在这个示例项目中,微软... 查看详情

ASP.NET 核心上真的需要反向代理吗?

...反向代理吗?【英文标题】:IsreverseproxyactuallyneededonASP.NETcore?【发布时间】:2019-09-2509:26:37【问题描述】:我们想知道大多数用例是否真的需要反向代理,希望能提供更多信息。Kerstel/Nginx文档声称:“Kestrel非常适合从ASP.NETCore... 查看详情

asp.netcore搭载envoy实现微服务身份认证(jwt)

本文内容搭建Keycloak配置Envoy编写API服务编排本文小结在构建以gRPC为核心的微服务架构的过程中,得益于Envoy对gRPC的“一等公民”支持,我们可以在过滤器中对gRPC服务进行转码,进而可以像调用WebAPI一样去调用一个gRPC服务。通... 查看详情

asp.netcore搭载envoy实现微服务身份认证(jwt)

本文内容搭建Keycloak配置Envoy编写API服务编排本文小结在构建以gRPC为核心的微服务架构的过程中,得益于Envoy对gRPC的“一等公民”支持,我们可以在过滤器中对gRPC服务进行转码,进而可以像调用WebAPI一样去调用一个gRPC服务。通... 查看详情

使用asp.netcoresignalr实现app扫描登录

使用ASP.NETCORESignalR实现APP扫描登录使用signalr实现APP扫码登录1.背景介绍在移动化时代,web开发很多时候都会带着移动端开发,这个时候为了减少重复输入账号密码以及安全性,很多APP端都会提供一个扫码登录功能,web端生成二维... 查看详情

asp.netcore反向代理部署知多少(代码片段)

Nginx配置路由转发首先来看下IdentityServer4.Admin的项目结构:IdentityServer4.Admin/├──Id4.Admin.Api#用于提供访问Id4资源的WebApi项目├──Id4.Admin#用于提供管理Id4资源的Web管理面板├──Id4.STS.Identity#用于提供STS服务的Web项目作为... 查看详情

使用playwright对asp.netcore应用执行功能测试

...部署好的Web应用。其实,开发人员也可以使用它在ASP.NETCore应用程序中进行功能测试。功能测试功能测试是从用户角度编写,用于基于其要求验证系统的正确性。由于功能测试在系统级别运行,所以可能需要一定程度... 查看详情

asp.netcore读写任意文件

参考技术AASP.NETCore是一个免费的,开源的,高性能,轻量级且跨平台的框架,用于构建基于云的应用程序,例如Web应用程序,IoT应用程序和移动后端。它旨在在云和本地环境中运行。与.NETCore一样,它以最小的开销进行模块化设... 查看详情

asp.netcore同时支持多种认证方式|swagger支持(代码片段)

前言上次,我们实现了《ASP.NETCore同时支持多种认证方式》:services.AddAuthentication()    .AddDemoAuthentication(options =>  )    .AddJwtBearer(options =>            ...    );我们还希望为Swagger也添加多种认证支 查看详情

是啥让某些东西成为 ASP.NET Core 中的请求功能?

】是啥让某些东西成为ASP.NETCore中的请求功能?【英文标题】:WhatmakessomethingbearequestfeatureinASP.NETCore?是什么让某些东西成为ASP.NETCore中的请求功能?【发布时间】:2016-05-0120:46:02【问题描述】:在ASP.NETCore中有一点我相信我还没... 查看详情