【微服务】05-网关与BFF(Backend For Frontend)

news2024/9/28 13:21:39

文章目录

    • 1.打造网关
      • 1.1 简介
      • 1.2 连接模式
      • 1.3 打造网关
    • 2.身份认证与授权
      • 2.1 身份认证方案
        • 2.1.1 JWT是什么
        • 2.1.2 启用JwtBearer身份认证
        • 2.1.3 配置身份认证
        • 2.1.4 JWT注意事项

1.打造网关

1.1 简介

BFF(Backend For Frontend)负责认证授权,服务聚合,目标是为前端提供服务。BFF是在前后端分离架构出来后才出现的,为前端提供单纯的API样式的网关。

在微服务架构中网关和BFF的区别实际不大,二者之间的职责可以是重叠,聚合的,本质来讲BFF模式是网关职责的一种进化。

1.2 连接模式

在这里插入图片描述

传统的连接模式

在这里插入图片描述

共享网关模式的好处是统一的入口,所有的应用程序通过单一的网关进行请求,适合网关比较强大并且所有接口都在网关上注册,要求网关的可用性比较高。

在这里插入图片描述

随着业务的发展,单个服务并不能满足要求,很可能需求是需要跨微服务之间进行组装数据,这时候就出现了聚合服务。聚合服务可以单独作为一个服务存在微服务的体系下,也是通过网关去访问它,实际上聚合服务也可以设计在网关中,这样的网关实际上就类似于BFF。

在这里插入图片描述

专用网关模式指的是针对不同的客户端采用不用的网关,比如将移动端和PC的网关分开。这样的好处在于,不同的客户端所依赖的网关是不同的,可以使故障隔离,不用端之间是不会收到相互之间的影响;同时也可以为不同端设计不同的数据聚合接口,暴露不同的微服务Api。不同业务线之间只要维护自己的网关,同时根据自身业务线去进行业务的拆分

1.3 打造网关

  • 添加包Ocelot 14.0.3
  • 添加配置文件ocelot.json
  • 添加配置读取代码
  • 注册Ocelot服务
  • 注册Oceot中间件
// startup

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }
        
public void ConfigureServices(IServiceCollection services)
{
	services.AddOcelot(Configuration);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	... 
	 app.UseOcelot().Wait(); // 放最后是为了让网关内置的 Api仍然生效
}

2.身份认证与授权

2.1 身份认证方案

  • Cookie
  • JWT Bearer

2.1.1 JWT是什么

  • 全程 Json Web Tokens
  • 支持签名的数据结构

在这里插入图片描述

2.1.2 启用JwtBearer身份认证

  • Microsoft.AspNetCore.Authentication.JwtBearer

2.1.3 配置身份认证

  • Ocelot网关配置身份认证
  • 微服务配置认证与授权
// appsetting.json配置秘钥
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "SecurityKey": "aabbccddffskldjfklajskdlfjlas234234234"
}

// startup 配置
 var secrityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SecurityKey"]));
  services.AddSingleton(secrityKey);
  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
       .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
       {
           
       })
       .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
       {
           options.TokenValidationParameters = new TokenValidationParameters
           {
               ValidateIssuer = true,//是否验证Issuer
               ValidateAudience = true,//是否验证Audience
               ValidateLifetime = true,//是否验证失效时间
               ClockSkew = TimeSpan.FromSeconds(30),
               ValidateIssuerSigningKey = true,//是否验证SecurityKey
               ValidAudience = "localhost",//Audience
               ValidIssuer = "localhost",//Issuer
               IssuerSigningKey = secrityKey//拿到SecurityKey
           };
       });

// 注册
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	...
	// 这两个需要注册在UseEndpoints之前
	app.UseAuthentication();
    app.UseAuthorization();

	app.UseEndpoints(endpoints =>
     {
           endpoints.MapHealthChecks("/live");
           endpoints.MapHealthChecks("/ready");
           endpoints.MapHealthChecks("/hc", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
           {
               ResponseWriter = HealthChecks.UI.Client.UIResponseWriter.WriteHealthCheckUIResponse
           });
           endpoints.MapControllers();

           endpoints.MapDefaultControllerRoute();
       });
       
       app.UseOcelot().Wait();
}

2.1.4 JWT注意事项

  • Payload信息不宜过大
  • Payload不宜存储敏感信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/929259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TMS FlexCel Studio for VCL and FireMonkey Crack

TMS FlexCel Studio for VCL and FireMonkey Crack FlexCel for VCL/FireMonkey是一套允许操作Excel文件的Delphi组件。它包括一个广泛的API,允许本机读取/写入Excel文件。如果您需要在没有安装Excel的Windows或macOS机器上阅读或创建复杂的电子表格,Fle…

skywalking服务部署

一、前言 Apache SkyWalking 是一个开源的分布式跟踪、监控和诊断系统,旨在帮助用户监控和诊断分布式应用程序、微服务架构和云原生应用的性能和健康状况。它提供了可视化的分析工具,帮助开发人员和运维团队深入了解应用程序的性能、调用链和异常情况 …

spring整合MybatisAOP整合PageHelper插件

一,spring集成Mybatis的概念 Spring 整合 MyBatis 是将 MyBatis 数据访问框架与 Spring 框架进行集成,以实现更便捷的开发和管理。在集成过程中,Spring 提供了许多特性和功能,如依赖注入、声明式事务管理、AOP 等 它所带来给我们的…

C++笔记之静态成员函数可以在类外部访问私有构造函数吗?

C笔记之静态成员函数可以在类外部访问私有构造函数吗? code review! 静态成员函数可以在类外部访问私有构造函数。在C中,访问控制是在编译时执行的,而不是在运行时执行的。这意味着静态成员函数在编译时是与类本身相关联的,而不…

Linux(基础篇一)

Linux基础篇 Linux基础篇一1. Linux文件系统与目录结构1.1 Linux文件系统1.2 Linux目录结构 2. VI/VIM编辑器2.1 vi/vim是什么2.2 模式间的转换2.3 一般模式2.4 插入模式2.4.1 进入编辑模式2.4.2 退出编辑模式 2.5 命令模式 3. 网络配置3.1 网络连接模式3.2 修改静态ip3.3 配置…

ubuntu下自启动设置,为了开机自启动launch文件

1、书写sh脚本文件 每隔5秒钟启动一个launch文件,也可以直接在一个launch文件中启动多个,这里为了确保启动顺利,添加了一些延时 #! /bin/bash ### BEGIN INIT sleep 5 gnome-terminal -- bash -c "source /opt/ros/melodic/setup.bash…

4.12 TCP 连接,一端断电和进程崩溃有什么区别?

目录 TCP keepalive TCP 的保活机制 主机崩溃 进程崩溃 有数据传输的场景 客户端主机宕机,又迅速重启 客户端主机宕机,一直没有重启 TCP连接服务器宕机和进程退出情况总结 TCP keepalive TCP 的保活机制 TCP 保活机制需要通过 socket 接口设置 S…

算法学习——递归

引言 从这个专栏开始,我们将会一起来学习算法知识。首先我们要一起来学习的算法便是递归。为什么呢?因为这个算法是我很难理解的算法。我希望通过写这些算法博客;来加深自己对于递归算法的理解和运用。当然,学习算法最快的方式便是…

一文解析block io生命历程

作为存储业务的一个重要组成部分,block IO是非易失存储的唯一路径,它的生命历程每个阶段都直接关乎我们手机的性能、功耗、甚至寿命。本文试图通过block IO的产生、调度、下发、返回的4个阶段,阐述一个block IO的生命历程。 一、什么是块设备…

Python“牵手”lazada商品列表数据,关键词搜索lazadaAPI接口数据,lazadaAPI接口申请指南

lazada平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,lazadaAPI接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问lazada平台的数据,包括商品信息、店铺信息、物流信息等,从而实现la…

安装启动yolo5教程

目录 一、下载yolo5项目 二、安装miniconda(建议不要安装在C盘) 三、安装CUDA 四、安装pytorch 五、修改配置参数 六、修改电脑参数 七、启动项目 博主硬件: Windows 10 家庭中文版 一、下载yolo5项目 GitHub - ultralytics/yolov5:…

C++笔记之智能指针和单例、依赖注入结合使用

C笔记之智能指针和单例、依赖注入结合使用 code review! 文章目录 C笔记之智能指针和单例、依赖注入结合使用例1.一个类不使用单例,另一个类使用单例例2.两个类都使用单例,并且通过getInstance()传入类的实例例3.std::make_unique不能访问私有的构造函…

python将png格式的图片转换为jpg格式的图片

png图片是4通道 RGBA图像,具有4个通道(红色、绿色、蓝色和透明度),用于表示彩色图像以及透明度信息。 只是简单的修改后缀,并不能将png格式图片改为jpg格式。 将png格式的图片转换为jpg格式的图片 确保安装了pillow库…

自启动遇到某个节点或者某种环境变量问题导致启动失败

前言:此次记录无人车自启动过程遇到的问题。为了让ROS无人车能够实现飞控进行室外自主航线的问题,将飞控发布的PWM转为ROS无人车对应的速度。为了确保无人车启动后能够使用遥控器控制无人车,所以需要开机自启动。 硬件: 1、star…

C语言刷题训练DAY.13

1.有序序列判断 解题思路&#xff1a; 这里我们先看代码&#xff0c;我们定义了一个flag1和flag2&#xff0c;它的作用主要就是判断是不是升序&#xff0c;具体怎么使用的&#xff0c;我为大家画图展示。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;…

springboot源码编译问题

问题一 Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.5.RELEASE in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public/) 意思是无法在阿里云的镜像仓库中找到资源 解决&#xff1a;将配置的镜像删除即可&#…

《代码随想录》专题:回溯算法1

1、组合问题 题目链接&#xff1a;77. 组合 题解 把组合问题抽象为如下树形结构 图中每次搜索到了叶子节点&#xff0c;我们就找到了一个结果。相当于只需要把达到叶子节点的结果收集起来&#xff0c;就可以求得 n个数中k个数的组合集合。最难理解的是单层搜索的过程 回溯法的…

NIST SP 800-22测试包

NIST测试包,包含15种不同的测试,对序列的随机性进行测试。其中,部分测试包含子测试。 随便选一个序列,看看测试结果: ------------------------------------------------------------------------------ RESULTS FOR THE UNIFORMITY OF P-VALUES AND THE PROPORTION OF P…

Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1

参考的博文&#xff1a;《在 Ubuntu 上使用源码安装 OpenResty》 《OpenResty 安装安装详解-Ubuntu》 《Linux学习之CentOS 7源码安装openresty》 https://openresty.org/en/download.html是官网下载网址&#xff0c;页面往下拉有下载的链接。 https://github.com/openresty…

表达式(Expression)

可以将lambda表达式分配给Func或Action类型委托&#xff0c;以处理内存中的集合。.NET编译器在编译时将分配给Func或Action类型委托的lambda表达式转换为可执行代码。 LINQ引入了一种名为Expression的新类型&#xff0c;该类型代表强类型的lambda表达式。这意味着lambda表达式也…