干货分享|如何将前端代理服务器(BFF)接入身份认证(3完结篇)

续集3

前篇文章在前面发布,同学们可以自行找一下。

本篇文章将继续通过实例来详细讲解如何将前端代理服务器(BFF)接入身份认证。我们将使用一个示例应用来演示 BFF 与身份认证的集成过程。

3 在 Full BFF 中接入认证平台

本小节将介绍如何在 Full BFF 中接入身份认证平台。Full BFF 不仅接管与身份认证平台的令牌获取过程,还接管了后续与资源服务器打交道的过程。通过使用 Full BFF,前端也不需要保存身份认证平台颁发的令牌了,在这种架构下,这将由 BFF 来保存。前端和 BFF 之间通过 Cookie 维持其单独的会话。

在数字化转型浪潮中,公司或者机构组织被迫在可维护性和安全性之间做出权衡,虽然在架构中采用原始的朴素 Naive BFF 层,在实现上最简单,维护起来也更省心,但这牺牲了安全性,在今天的自动化社会中,这种妥协是不可接受的。所以我们需要一个更安全的解决方案,这就是 Full BFF。

许多拥有单页应用程序、在前端使用 access_tokens 并采用微服务架构的公司,现在正努力将身份验证转移到服务器端。这个服务器端本质上就是 Full BFF。

我们再来回顾一个目前可能会面临的问题,假设一家公司已经实现了一套如图所示的无BFF 应用架构。

在这种架构中,前端应用程序直接与身份认证平台打交道,获取令牌,然后将令牌发送到后端服务,后端服务再将令牌发送到资源服务器,获取资源。即:

1前端应用程序:

·运行在浏览器中。

·通过将未经过身份验证的用户转到身份提供者来发起对用户的验证。

·当用户验证之后,前端单页面应用程序发起令牌请求。

·前端单页面应用将令牌随着 Authentication 头发送到后端服务进行 HTTP 调用。

2身份提供者:

·是 OpenID Connect 服务器。

·颁发令牌。

·验证用户的凭据,即用户在此处登录。

3API/微服务:

·通过令牌保护。典型的是只有在令牌有效时才允许访问 API。

·API 应用一个规则来决定一个用户是否已经被授权来访问/查看资源。换句话说,微服务,会实施访问控制策略。

这种架构有什么问题呢?下面来看看。

1)在前端进行令牌交换暴露了不必要的攻击向量

在这样的架构下,当用户登录时,授权码会发送到前端。前端必须拿这个授权码来换取令牌。

理论上没有办法分辨是谁在拿着授权码换取令牌。为了确保将令牌发送给想要发送的接收方,就需要使用客户端密钥。但是在这个架构下,没有使用客户端密钥。

2)令牌可以被盗用

由于令牌存储在前端,理论上很容易被盗用。

由于以上架构有着这样的问题,因此我们更推荐下面的方案。一般来说,要缓解上面提到的架构的安全风险,就需要将验证环节转移到服务器端。

这样的结果就是,解决方案架构会变得更加复杂(这也是在采纳该方案时需要仔细权衡的原因)。

为了能够在服务器端验证用户,就需要一个能够跟踪用户会话的组件,这个组件就是 Full BFF,如图所示。

上图的架构图包含:

1浏览器端的单页面应用。

·运行在浏览器端。

·和 API 处于同一个域名下。

·并不是用户验证的发起方。

2 BFF。

·负责托管单页面应用资源(index.html 和/dist 目录)。

·暴露 API。

·拥有 HTTP 会话状态。

·是验证用户的发起方(将用户重定向到身份提供者)。

3身份提供者。

·是一个 OpenID Connect 服务器。

·颁发令牌。

·验证用户的凭据,即用户在此处登录。

4API/微服务。

· 被令牌保护。一般来说,只有在令牌有效时才允许访问 API。

·API 应用一个规则来决定一个用户是否已经被授权来访问/查看资源。换句话说,微服务,会实施访问控制策略。

为什么 Full BFF 架构会更安全呢?主要有以下两个原因:

(1)令牌交换发生在服务器端。

对于攻击者来说,没有任何方式观察到 BFF 是怎么获取到令牌的,从而极难进行干预。

同时,由于验证过程也发生在服务器端,因此在交换令牌的过程中可以安全地包含客户端密钥。

这就意味着身份提供者可以验证究竟是谁正在获取令牌。

(2)更安全的会话管理。

如果要将令牌保存在浏览器端,一般就是保存在一个安全 Cookie、本地存储或者会话存储中。

如果攻击者找到了办法复制它们,就基本上劫持了会话。要防止这样的情况,前端就需要实现所有这些机制:预防会话劫持、防止 CSRF 攻击、防止 XSS 攻击等。

实现会话管理最好的方式是不要自行实现。微软(或者其他大型公司)已经为我们完成了这向工作。

工作原理分析:简单来说,BFF 就是一个反向代理服务器。但是 Full BFF 强调它不仅将流量传递到下游领域服务,它还在转发请求时添加 Authentication 头部。

Full BFF 会处理两种类型的请求。多数请求是由单页面应用发起的 API 请求。BFF 处理 API 请求的流程如图所示。

Full BFF 会将请求转发到 API,同时将令牌添加到 Authentication 头部。API 会验证令牌,然后返回响应。

Full BFF 还有网站托管能力,这意味着用户可以通过浏览器访问该 BFF。当用户浏览至该 BFF时,有一个特殊的端点:/login 端点。通过该端点,用户得以验证。验证用户的处理流程可以使用图来展示。

完结啦!BFF 的发展历程,以及每个阶段的 BFF 如何接入身份认证平台,本篇文章就已经全部讲清楚了。以后还会为大家带来喜欢的干货文章,请多多关注哦!

本文摘自《数字身份认证技术与实践》,获出版社和作者授权发布。

数字身份认证技术与实践——jd

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

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

相关文章

Raylib 坐标系适应与GPU绘制参数

通过750 - 鼠标坐标&#xff0c;把原点在左上角的鼠标坐标变成左下角 实现输入数据后的坐标系同GPU原点在左下角坐标相同&#xff0c; 比数组0&#xff0c;0对应左上角好&#xff0c; 此时实际上数组0&#xff0c;0对应左下角 #include <raylib.h> // 感受&#xff1a…

【SpringBoot配置文件读取】无法读取yaml文件中文字符

1. yaml配置文件 注意要将该文件编码格式改为UTF-8 spring:application:name: 好好学习admin:name: 李斯age: 24books:- name: 数据结构desc: 数据书- name: 编译原理desc: 编译书2.配置实体类 Data设置get&#xff0c;set方法Component注册为BeanConfigurationProperties(p…

开发者聊科学作息时间表

非常有幸对科学作息时间表app的开发者做一次采访。 问&#xff1a;你对科学作息时间表app满意么&#xff1f; 答&#xff1a;非常不满意&#xff0c;我们的设想是让他更智能&#xff0c;更多的提醒方式&#xff0c;更好的交互体验。如果作为一个闹钟他是非常不合格的&#xff0…

R可视化数据必要格式——长格式

一、引言 我们在对数据进行可视化时遇到最头疼、最常见的问题是什么&#xff1f;数据问题。 因为我们往往不会从零自己编程进行可视化&#xff0c;往往是现有模板或积累&#xff0c;而正确的数据格式对应正确的图形包要求&#xff0c;一定会正确出图&#xff0c;所以只有一个问…

调试 hipcc 的llvm llc gpu目标代码生成模块

源码&#xff1a; hello_vectorAdd.hip: __global__ void vectorAdd(const float *A, const float *B, float *C) {int i blockDim.x * blockIdx.x threadIdx.x;C[i] A[i] B[i] 0.0f; } Makefile: x.O1.s: hello_vectorAdd.hip../../local_amdgpu/bin/clang ./hello_vec…

力扣hot100-普通数组2

文章目录 题目&#xff1a;轮转数组方法1-使用额外的数组方法2-三次反转数组 除自身以外数组的乘积方法1-用到了除法方法2-前后缀乘积法 题目&#xff1a;轮转数组 原题链接&#xff1a;轮转数组 方法1-使用额外的数组 方法1是自己写出来的。方法2参考的别人的&#xff0c;…

AttackGen:一款基于LLM的网络安全事件响应测试工具

关于AttackGen AttackGen是一款功能强大的网络安全事件响应测试工具&#xff0c;该工具利用了大语言模型和MITRE ATT&CK框架的强大功能&#xff0c;并且能够根据研究人员选择的威胁行为组织以及自己组织的详细信息生成定制化的事件响应场景。 功能介绍 1、根据所选的威胁行…

【MindSpore学习打卡】应用实践-计算机视觉-FCN图像语义分割-基于MindSpore实现FCN-8s进行图像语义分割的教程

图像语义分割是计算机视觉领域中的一个重要任务&#xff0c;它旨在对图像中的每个像素进行分类&#xff0c;从而实现对图像内容的详细理解。在众多图像语义分割算法中&#xff0c;全卷积网络&#xff08;Fully Convolutional Networks, FCN&#xff09;因其端到端的训练方式和高…

7.7、指针和函数

代码 #include <iostream> using namespace std;//实现两个数字进行交换 void swap01(int a, int b) {int temp a;a b;b temp;cout << "swap01a " << a << endl;cout << "swap01b " << b << endl; }void sw…

08 docker Registry搭建docker私仓

目录 本地镜像发布流程 1. docker pull registry 下载镜像 2. docker run 运行私有库registry 3. docker commit 构建镜像 4. docker tag 修改新镜像&#xff0c;使之符合私服规范tag 5. 修改配置文件使之支持http 6. curl验证私服库上有什么镜像 7. push推送 pull拉取 …

Activity、Window、DecorView的关系

目录 一、Activity、Window、DecorView的层级关系如下图所示&#xff1a; 1、Activity 2、Window 3、DecorView 二、DecorView初始化相关源码 三、DecorView显示时机 前言&#xff1a; 不同的Android版本有差异&#xff0c;以下基于Android 11进行讲解。 一、Activi…

Halide AOT模式

这种模式会提前&#xff0c;会提前编译好&#xff0c;变成dll什么的&#xff0c;可接受任何输入的参数运行。 然后这样调用&#xff0c;必须要make一下前一个file&#xff0c;才有后面的.h

魔行观察-AI数据分析-蜜雪冰城

摘要 本报告旨在评估蜜雪冰城品牌作为投资对象的潜力和价值&#xff0c;基于其经营模式、门店分布、人均消费、覆盖省份等关键指标进行分析。 数据数据源&#xff1a;魔行观察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概览 蜜雪冰城是中国…

Vue 爬坑

都是基于最新的Vue3版本 "vue": "^3.4.29" 1 vue组建样式设置 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vue </script><template><div><a href"https://vitejs.dev" tar…

RPA 第一课

RPA 是 Robotic Process Automation 的简称&#xff0c;意思是「机器人流程自动化」。 顾名思义&#xff0c;它是一种以机器人&#xff08;软件&#xff09;来替代人&#xff0c;实现重复工作自动化的工具。 首先要说一句&#xff0c;RPA 不是 ChatGPT 出来之后的产物&#x…

elementui中@click短时间内多次触发,@click重复点击,做不允许重复点击处理

click快速点击&#xff0c;发生多次触发 2.代码示例&#xff1a; //html<el-button :loading"submitLoading" type"primary" click"submitForm">确 定</el-button>data() {return {submitLoading:false,}}//方法/** 提交按钮 */sub…

分布式锁——基于Redis分布式锁

单机锁 服务器只有一个&#xff0c;JVM只有一个。 用synchronized加锁&#xff0c;对lock对象加锁&#xff0c;只有线程1结束&#xff0c;线程2,3才会开始。 再用uid避免一个线程多次进来。 分布式锁 真正上线时&#xff1a; 【注&#xff1a;这些服务器连接的是一个Redis集…

STM32入门笔记(03): ADC(SPL库函数版)(2)

A/D转换的常用技术有逐次逼近式、双积分式、并行式和跟踪比较式等。目前用的较多的是前3种。 A/D转换器的主要技术指标 转换时间 分辨率 例如&#xff0c;8位A/D转换器的数字输出量的变化范围为0&#xff5e;255&#xff0c;当输入电压的满刻度为5V时&#xff0c;数字量每变化…

如何学好自动化测试

1. 什么是自动化测试 自动化测试是使用脚本和工具来执行测试任务&#xff0c;以替代手工测试过程。它可以提高效率、减少人工错误&#xff0c;并增加测试覆盖率。在软件开发过程中&#xff0c;自动化测试已经成为了不可或缺的一部分。 自动化测试主要有以下好处&#xff1a; …

Amos结构方程模型---探索性分析

初级 第5讲 探索性分析_哔哩哔哩_bilibili amos中基本操作&#xff1a; 椭圆潜变量&#xff0c;不可预测 数据导入 改变形状 判定系数 方差估计和假设检验&#xff1a; 探索性分析&#xff1a; ses&#xff08;潜变量&#xff09;社会经济指数 从考虑最大的MI开始&#xff0c;卡…