干货分享|如何将前端代理服务器(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矢量绘图设计Sketch中文 Sketch直装安装包

Sketch是一款专为UI设计师和UX专家打造的矢量图形设计软件,以其简洁的界面、强大的功能和高效的协作能力而闻名。Sketch支持快速创建高质量的UI界面、图标、图形和插画,其矢量绘图工具让设计细节更加精准。同时,Sketch内置丰富的插件和组件库…

设计模式-结构型-08-组合模式

文章目录 1、学校院系展示需求2、组合模式基本介绍3、组合模式示例3.1、 解决学校院系展示(透明模式1)3.2、高考的科目(透明模式2)3.3、高考的科目(安全组合模式) 4、JDK 源码分析5、注意事项和细节 1、学校…

MySQL之应用层优化(二)

应用层优化 Web服务器问题 寻找最优并发度 每个Web服务器都有一个最佳并发度——就是说,让进程处理请求尽可能快,并且不超过系统负载的最优的并发连接数。这就是前面说的最大系统容量。进行一个简单的测量和建模,或者只是反复试验&#xf…

Python基础入门知识

目录 引言 简要介绍Python语言 为什么要学习Python Python的应用领域 Python安装和环境配置 Python的下载和安装(Windows, macOS, Linux) 配置Python环境变量 安装和使用IDE(如PyCharm, VS Code) Python基本语法 注释 变量和数据类型(数字,字符串,列表,元组,字典,…

互联网医院系统源码解析:如何打造智能数字药店APP?

在互联网技术飞速发展的今天,医疗行业也在不断与之融合,互联网医院系统应运而生。特别是智能数字药店APP的兴起,使得医疗服务变得更加便捷、高效。本文将深入解析互联网医院系统源码,探讨如何打造一个智能的数字药店APP。 一、互…

思维,CF 739A - Alyona and mex

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 739A - Alyona and mex 二、解题报告 1、思路分析 我们考虑区间mex运算的值最大也就是区间长度,所以我们最大值的上界就是所有区间中的最小长度,假如记为mi 我们一定可以构造出答案…

【C++】const详解

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文作为 JohnKi ,引用了部分大佬的案例 📢未来很长,…

RabbitMQ 更改服务端口号

需求 windows环境下,将RabbitMQ默认的端口号 5672 改为 11001 实现 本机RabbitMQ版本为3.8.16,找到配置文件位置,路径为:C:\Users\%USERNAME%\AppData\Roaming\RabbitMQ\advanced.config 配置文件默认内容为空 填写修改端口号…

QGC添加添加QML可访问的单例

文章目录 前言一、添加文件二、修改qgroundcontrol.pro三、修改QGCApplication.cc四、修改QGroundControlQmlGlobal.h五、修改QGroundControlQmlGlobal.cc六、测试前言 QGC 4.2 一、添加文件 在src目录下添加文件夹SingletonTest,在里面新建SingletonTest.cc和SingletonTes…

【Sklearn-驯化】一文搞懂很难的EM算法以及实践

【Sklearn-驯化】一文搞懂很难的EM算法以及实践 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注:微信公…

Unity扩展 Text支持超链接文本

重点提示:当前的文本扩展支持多个超链接,支持修改超链接规则和支持修改超链接颜色。 近期在邮件文本中用到了超链接。最初是在邮件窗口中新加一个按钮用来超链接跳转,之后发现效果表现不如直接在文本中添加,后经过几个小时的资料…

两步解决Hugging Face下载模型速度慢/连接超时/无法下载问题

博主使用的配置是 x86_64 Linux服务器 第一步设置代理镜像: export HF_ENDPOINT=https://hf-mirror.com 第二步(使用代码时,删除引号): --token参数表示下载的模型是否需要登录验证(部分模型需要token) huggingface-cli download --token "获取的hf_*******token…

如何选择优质模型?SD3性能究竟如何?

遇到难题不要怕!厚德提问大佬答! 厚德提问大佬答12 厚德提问大佬答第十二期 你是否对AI绘画感兴趣却无从下手?是否有很多疑问却苦于没有大佬解答带你飞?从此刻开始这些问题都将迎刃而解!你感兴趣的话题,厚德…

vivado联合modelsim仿真

一. 编译Vivado仿真库 打开Vivado,Tools -> Compile Simulation Libraries 二. 设置仿真工具和库路径 因为新建工程的默认仿真工具是Vivado Simulator,所以要使用Modelsim仿真,每个新工程都要设置一次,方法如下: …

2024年【安全生产监管人员】考试题及安全生产监管人员试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 安全生产监管人员考试题根据新安全生产监管人员考试大纲要求,安全生产模拟考试一点通将安全生产监管人员模拟考试试题进行汇编,组成一套安全生产监管人员全真模拟考试试题,学员可通…

现代工作场所中的睡岗检测算法应用

在现代职场环境中,员工的工作状态直接影响到公司的整体效益。睡岗现象,即员工在工作时间内打瞌睡或睡觉,不仅降低了生产力,还可能带来安全隐患。因此,如何有效地检测和预防睡岗行为成为了企业管理中的一个重要课题。随…

真的,今年我劝各位真的别轻易离职

前言 在当前的职业浪潮中,把握时机深入学习大模型技术无疑是明智之举。随着行业对这类专业人才的渴求日益增长,无论是巨头企业还是新兴初创,都在加速推进大模型的应用实践,而真正能将技术有效落地并转化为业务价值的专家却供不应…

详细解释下flutter初始示例的代码

详细解释下flutter初始示例的代码 main 首句导入需要的包 类似于其他语言的import main函数为入口函数 包裹MyApp类 MyApp 这个类继承自无状态类 可见myapp不管理任何状态 build方法是所有widget内必须实现的方法 此处返回一个 ChangeNotferiProvider 可以看到它用于管理应…

理解 REST API 和 GraphQL 的区别

你可能听说过 GraphQL,但对它与 REST 的区别还不完全确定。今天我们将介绍 REST 和 GraphQL 的一些基本原理,以及它们的不同使用场景。 GraphQL 作为 REST API 的替代品越来越受欢迎,不过它不一定是完全的“替代品”。 根据你的使用情景&am…

LLM笔记:训练大模型之并行化

1 数据并行 最常见的并行化手段主要是把数据分成多个块,然后每个节点就可以在本地独立的跑各自的数据任务,最后再和其他节点通信,进而汇总最后的结果好处就是计算效率高,每个节点可以独自计算自己的任务且这种方法易于实现缺点就…