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

news2024/7/4 6:21:53

续集2

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

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

1)在 Keycloak 中新建一个安全领域

在 Keycloak 中新建一个安全领域(Realm),只需要取一个名字就好,如图所示。

代码片段:可切换语言,无法单独设置文字格式

2)在安全领域中新建一个客户端配置

你的 egg.js 服 务 所 公 开 的 终 端 节 点 ( 域 名 + 路径),可以使用通配符,比如https://uniheart.pa-ca.me/*,如图所示。

3)创建 keycloak.json 文件

在 egg.js 项目根目录下添加一个 keycloak.json 文件,内容如下,注意相关字段要和 Keycloak 对应。realm 对应刚刚创建的 Realm,resource 对应刚刚创建的客户端名称。

{"realm": "UniHeart","auth-server-url": "https://keycloak.jiwai.win/auth","ssl-required": "external","resource": "UniHeart-Client"}

4)引入 egg-keycloak 插件

随后,添加@jeff-tian/egg-keycloak 插件:

npm install --save @jeff-tian/egg-keycloak

并且在 config/plugin.ts 文件中增加如下配置:

{//...keycloak: {enable: true,package: '@jeff-tian/egg-keycloak',},// ...}

5)在路由中使用 Keycloak

可在想要保护的路由前,增加 Keycloak 中间件。比如,在/app/router/keycloak/index.ts 文件中,可以使用这样的代码来保护/keycloak/login 路由:

import { Application } from 'egg'export default (app: Application) => {const { router } = appconst subRouter = router.namespace('/keycloak')subRouter.get('keycloak.login','/login',app.keycloak.protect(),async ctx => {ctx.body = ctx.session['keycloak-token']},)}

以上代码的最终效果和前面所说的示例相同,其关键在于添加 keycloak.protect()中间件。

这样,就完成了基于 egg.js 的 BFF 与 Keycloak 的集成。在这个过程中,我们只需要配置好keycloak.json 文件,然后在路由中使用 keycloak.protect()中间件,就可以实现身份认证和授权的功能。

在这个过程中,egg.js 会自动处理和 Keycloak 的交互,包括获取授权码、使用授权码换取令牌、使用令牌获取用户信息等步骤。这样,我们就可以在 BFF 中使用 Keycloak 来实现身份认证和授权的功能。

如果前端使用了该 egg.js BFF,那么它不需要关心身份认证和授权的细节,只需要调用/keycloak/login接口,就可以获取令牌响应。授权码许可模式中的多个来回请求都由 egg.js BFF 代劳,前端团队也不需要了解 Keycloak 中配置的客户端密码等信息了。

文章未完待续,小伙伴们请等待一下哦!

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

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

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

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

相关文章

红队工具Finger 安装具体以步骤-示例centos

1.git clone https://github.com/EASY233/Finger.git 如果没有 yum install git 2.pip3 install -r requirements.txt 找到finger所在的文件夹 可以用find -name "Finger"进入文件中配置命令 前提要安装python yum install python-pip33.python3 Finger.py -h

中国AI产业迎来标准化大跃进,程序员们准备好了吗

中国AI产业迎来标准化大跃进,程序员们准备好了吗? 程序员们,你们是否已经感受到了人工智能技术的浪潮?现在,中国工信部联合其他部门发布了《国家人工智能产业综合标准化体系建设指南(2024版)》&…

龙迅LT8641UXE HDMI四进一出切换开关,支持标准HDMI 2.0内置MCU

龙迅LT8641UXE描述: Lontium LT8641UX HDMI2.0开关具有符合HDMI2.0/1.4规范的4:1开关,最大6Gbps高速数据速率,自适应均衡RX输入和预先强调的TX输出支持长电缆应用,没有XTAL板上节省BOM成本。LT8641UX HDMI2.0开关自动…

如何获取音频伴奏

如何获取音频伴奏 在今天的互联网上,有许多好听的音乐.面对这些音乐,我们有时需要伴奏音频,许多音频在网站上可以查找到,但有些不行,今天,我们要通过audacity软件截取音频伴奏. 下载audacity软件 audacity-64.exe 访问密码:8221 或官方网站(访问较慢) 选择简体…

LLM指令微调Prompt的最佳实践(二):Prompt迭代优化

文章目录 1. 前言2. Prompt定义3. 迭代优化——以产品说明书举例3.1 产品说明书3.2 初始Prompt3.3 优化1: 添加长度限制3.4 优化2: 细节纠错3.5 优化3: 添加表格 4. 总结5. 参考 1. 前言 前情提要: 《LLM指令微调Prompt的最佳实践(一)&#…

时序约束(二): input delay约束和output delay约束

一、input delay约束 在千兆以太网数据收发项目中,RGMII的数据输入方式为DDR,源同步输入方式,可以用之前提到的分析模型进行约束。 在时序约束原理中我们提到,input delay约束的就是发射沿lunch到数据有效的延时,根据…

本地项目推送到gitlab仓库的保姆级教程

目录 1、安装git (1)Windows系统 (2)Linux系统 2、gitlab创建空白项目 3、创建密钥 4、将密钥添加到gitlab中 5、远程配置 (1)配置全局的用户和邮箱 (2)本地文件夹初始化 …

Rust: polars行遍历,从dataframe到struct及Bar设计比较

pandas提供了iterrows()、itertuples()、apply等行遍历的方式,还是比较方便的。 polars的列操作功能非常强大,这个在其官网上有详细的介绍。由于polars底层的arrow是列存储模式,行操作效率低下,官方也不推荐以行方式进行数据操作。…

序号不足两位前面补0

预期目标 原始效果 代码实现 {${(index 1).toString().padStart(2, 0)}. ${item.sentence}}要实现自动编号并确保显示为两位数的格式,可以在 {index 1} 的地方进行格式化。在 JavaScript 中,可以使用 String.prototype.padStart() 方法来补足数字到指定…

Webpack: Loader开发 (1)

概述 如何扩展 Webpack?有两种主流方式,一是 Loader —— 主要负责将资源内容翻译成 Webpack 能够理解、处理的 JavaScript 代码;二是 Plugin —— 深度介入 Webpack 构建过程,重塑 构建逻辑。 相对而言,Loader 的职责…

三个方法教大家学会RAR文件转换为ZIP格式

在日常工作当中,RAR和ZIP是两种常见的压缩文件格式。有时候,大家可能会遇到将RAR文件转换为ZIP格式的情况,这通常是为了方便在特定情况下打开或使用文件。下面给大家分享几个RAR文件转换为ZIP格式的方法,下面随小编一起来看看吧~ …

如何通过指纹浏览器使用代理IP?

1.指纹浏览器定义 指纹浏览器是 一种浏览器技术,它根据用户设备的硬件、软件和配置等特征生成唯一标识符(称为“指纹”)。此指纹用于识别和追踪用户身份,即使用户更改其 IP 地址或清除浏览器数据(如缓存和 Cookie&…

美国抗攻击服务器有哪些可靠的解决方案

美国抗攻击服务器在面对日益严重的网络安全威胁时,需要采取一系列可靠的解决方案来确保服务器的稳定运行和数据安全。以下是一些科普性质的抗攻击服务器解决方案: 一、流量清洗与过滤 流量清洗是美国抗攻击服务器应对DDoS攻击的重要措施。当检测到异常流…

助力构建新型电力系统自主可控实时底座

近日,2024亚洲新型电力系统及储能展览会&亚洲新型电力及储能论坛会在广州广交会展馆圆满落下帷幕!科东软件携多款电力产品亮相展会,并在2024亚洲新型电力及储能论坛发表《“鸿道Intewell操作系统助力构建新型电力系统自主可控实时底座”》的主…

机器学习-EM算法

目录 一:最大似然估计 二:EM算法 加入隐变量 EM算法推导 1.Jensen不等式 点个赞呗!!! 一:最大似然估计 举个栗子:一个袋子里有很多个球,每次放回的取一个球,取了十次,其中有六次白球,4次黑球。那么就认为袋子里面取到白球的概率为6/10,黑球的概率为4/10。…

C++——list类用法指南

一、list的介绍 1、list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代 2、list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素 …

51单片机外部中断(按键识别)

欢迎入群共同学习交流 时间记录:2024/7/2 一、电路原理图 51单片机包含INT0、INT1两个外部中断接口 二、知识点介绍 1.中断寄存器位介绍 (1)TCON定时控制寄存器,位0(IT0)中断INT0请求信号选择位&#x…

性能调优 性能监控

1.影响性能考虑点包括: 数据库、应用程序、中间件(tomcat、nginx)、网络和操作系统等方面。 首先考虑自己的应用属于 CPU密集型 还是 IO密集型 cpu密集型 计算,排序,分组查询,各种算法 IO密集型 网络传输,磁盘读…

聊聊 golang 的 map

1、哈希表 哈希表是一个很常见的数据结构,用来存储无序的 key/value 对,给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。 设计一个好的哈希表,需要着重关注两个关键点:哈希函数、冲突处理。 1.1 哈希函数 …

观成科技:某修改版哥斯拉Webshell流量分析

一、工具介绍 哥斯拉是一款webshell权限管理工具,由java语言开发。功能特点:全部类型的shell能绕过市面大部分的静态查杀、流量加密能绕过过市面绝大部分的流量Waf。哥斯拉Webshell还可以通过各种魔改,绕过流量检测设备,近期&…