零信任:基于Apisix构建认证网关

最终效果

基于身份认证的零信任网关 - 知乎

背景

零信任一直是我们未来主攻的一个方向,全球加速,SD-WAN组网都是一些非常成熟的产品,全球加速是我们所有产品的底座,SD-WAN解决的是多个网络打通的问题,而零信任则主打应用访问。

关于零信任,我们已经实现了内网隐身功能,对于客户而言,内网不需要暴露任何端口,而在公网网关方面,我们支持不认证访问以及认证访问两种方式。

但是在认证方面,我们第一个版本只是简单的基于IP的认证,用户只需要登录我们的认证网站https://auth.beyondnetwork.net 然后登录自己的账号,我们就会下发客户的公网IP到网关,然后网关开放端口。

这种方式最大的弊端就是粒度很大,在同一个局域网下的设备,使用的是同一个公网IP,相当于给整个局域网开放了权限,但是第一个版本已经很好的完成了他的使命,并且获得了客户的认可(客户并不需要认证功能,只要针对他的IP开放即可)。在此之后,我们开始调研基于会话的认证,我们的目标非常清晰:

  • 身份认证
  • 权限控制
  • 最好能适配国内特色,支持企业微信,钉钉,飞书登录

关于Apisix

Apisix是我们零信任当中重度使用的产品,市面上此类项目无非就Nginx,Openresty,kong和Apisix,最终选择Apisix,没有太大具体原因,kong和Apisix都非常有名,选一个用就行。

Apisix充当我们的七层接入网关,负责用户流量接入的,我们零信任数据面的基本技术架构图如下:

身份认证方案

既然我们的代理网关是基于Apisix开发的,那么我们的身份认证自然也是需要跟着Apisix的插件走,Apisix支持多种认证插件,我们调研了两种方案:

  • 基于keycloak来做认证和授权
  • 基于casdoor来做认证和授权

首先基于keycloak的方案,Apisix有两种插件,一个是openid connect的通用方案,一个是authz-keycloak的转么为Keycloak的方案。

基于OpenID Connect的方案,我们测试发现,只能实现认证,没法实现权限控制,我们折腾了挺长时间,发现确实没有权限控制,如果有哪位朋友成功基于openid connect实现权限控制的,可以私聊我。

基于authz-keycloak的方案,我们没有成功跑起来,这种场景说明要么我们对keycloak的理解不深,要么是插件确实很难用,细节很多,未来容易掉坑。

至此我们开始研究casdoor,这个对国内比较友好,我们非常容易就跑起来了,身份认证+权限控制都没问题,唯一的问题是,如果要和我们的系统对接上,我们需要把用户,应用,权限信息全部同步过去,如果中间过程出现错误,还是会造成很多bug的。

最终我们的方案是尝试自己开发一个Apisix的插件,然后跟我们现有系统对接。我们评估了下改动量:

  • 开发一个Apisix的插件,能够实现类似OAuth2的功能
  • 调整现有接口,实现出一个类似OAuth2的server

工作量也不是很大,最主要的是我们完全可控,而且我们以后完全可以在我们的OAuth2 server上对接其他认证方式,对于Apisix而言完全不需要关注,只需要在OAuth2 server上进行调整即可。

最终在端午三天的假期我们完成了整个从基于IP的权限控制调整成了基于会话的权限控制。

未来计划

身份认证,权限控制不属于我们的专长,但是零信任产品又需要这种功能,未来我们可能会考虑和其他身份认证厂商比如Authing结合,目前也正在调研相关产品。如果您对我们的产品感兴趣的话,也可以添加我的个人微信zyj995139094 或者访问我们的官网 https://www.beyondnetwork.net 了解更多

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

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

相关文章

『PyQt5-Qt Designer篇』| 09 Qt Designer中分割线和间隔如何使用?

09 Qt Designer中分割线和间隔如何使用? 1 间隔1.1 水平间隔1.2 垂直间隔2 分割线2.1 水平线2.2 垂直线3 保存并执行1 间隔 间隔有水平间隔和垂直间隔: 1.1 水平间隔 拖动4个按钮,并设置为水平布局: 在第一个按钮的右边添加一个水平间隔: 设置其sizeType为Fixed,宽度为20…

c++ 函数的参数是否可以为auto

(1)在vs2019开到 cpp20 的语法规范,是可以的 (2)但网上和文心一言和书上说不可以 (2) 再附上一种auto 的很炫酷的写法:

HTML+CSS画一个卡通中秋月饼

HTMLCSS画一个卡通中秋月饼🥮🥮🥮 中秋活动水个文章 整个divcss实现个月饼,给前端初学者一个练手的demo 效果图 思路 HTMl 先来个轮廓画脸上的东西:眼睛、眉毛、腮红、嘴巴眼睛丰富下瞳孔画20个花瓣 CSS 轮廓是要外…

【MySQL】 MySQL数据库基础

文章目录 🐱‍👓数据库的操作📌显示当前的数据库📌创建数据库🎈语法:🎈语法说明🎈示例: 🌴使用数据库🎋删除数据库🐱‍🏍语…

react的状态管理简单钩子方法

1.recoil useProvider文件: import { atom, useRecoilState } from recoil;const initState atom({key: initState,default: {state: [],}, })// 将业务逻辑拆分到一个单独文件中,方便进行状态管理 export interface StateProps {id: number;text: string;isFini…

HTML导航栏二级菜单(垂直、水平方向)

二级菜单是指主菜单的子菜单。菜单栏实际是一种树型结构&#xff0c;子菜单是菜单栏的一个分支。简单分享主要的垂直和水平方向的CSS设计。 垂直方向&#xff1a; HTML: <body><div><ul><li><a href"#">家用电器</a><ul>…

灰狼算法Grey Wolf Optimizer跑23个经典测试函数|含源码

智能优化算法&#xff08;Grey Wolf Optimizer&#xff09; 文章目录 智能优化算法&#xff08;Grey Wolf Optimizer&#xff09;前言一、灵感二、GWO数学模型1、包围猎物2、狩猎3、攻击猎物4、开发5、代码实现 总结 前言 灰狼算法简介&#xff1a; 灰狼优化算法&#xff08;G…

使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题实例 1、问题描述 已知配送中心和需求门店的地理位置,并且已经获得各个门店的需求量。关于送货时间的要求,门店都有规定的时间窗,对于超过规定时间窗外的配送时间会产生相应的惩罚成本。为保持生鲜农产品的…

Git: 工作区、暂存区、本地仓库、远程仓库

参考链接&#xff1a; Git: 工作区、暂存区、本地仓库、远程仓库 https://blog.csdn.net/weixin_36750623/article/details/96189838

通过stream流实现分页、模糊搜索、按列过滤功能

通过stream实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后&#xff0c;需要经过一定的逻辑处理才进行前端展示&#xff0c;这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…

Hadoop-Hbase

1. Hbase安装 1.1 安装zookeeper、 hbase 解压至/opt/soft&#xff0c;并分别改名 配置环境变量并source生效 #ZK export ZOOKEEPER_HOME/opt/soft/zk345 export PATH$ZOOKEEPER_HOME/bin:$PATH #HBASE_HOME export HBASE_HOME/opt/soft/hbase235 export PATH$HBASE_HOME/b…

windows平台 git bash使用

打开所在需要git管理的目录,鼠标右键open Git BASH here 这样就直接进来,不需要windows dos窗口下麻烦的切路径&#xff0c;windows和linux 路径方向不一致 (\ /) 然后git init 建立本地仓库,接下来就是git相关的操作了. 图形化界面查看 打开所在需要git管理的目录,鼠标右键…

SpringMVC系列(四)之SpringMVC实现文件上传和下载

目录 前言 一. SpringMVC文件上传 1. 配置多功能视图解析器 2. 前端代码中&#xff0c;将表单标记为多功能表单 3. 后端利用MultipartFile 接口&#xff0c;接收前端传递到后台的文件 4. 文件上传示例 1. 相关依赖&#xff1a; 2. 逆向生成对应的类 3. 后端代码&#xf…

vMAP——论文解析

vMAP: Vectorised Object Mapping for Neural Field SLAM vMAP 是一个物体级稠密图 neural SLAM&#xff0c;每一个物体都用一个 mlp 来表征&#xff0c;而不需要 3D 先验。当 RGB-D 相机在没有任何先验信息的情况下时&#xff0c;vMAP 会即时检测物体 instance&#xff0c;并将…

Solidity 小白教程:19. 接收 ETH receive 和 fallback

Solidity 小白教程&#xff1a;19. 接收 ETH receive 和 fallback Solidity支持两种特殊的回调函数&#xff0c;receive()和fallback()&#xff0c;他们主要在两种情况下被使用&#xff1a; 接收 ETH处理合约中不存在的函数调用&#xff08;代理合约 proxy contract&#xff…

Thymeleaf语法详解

目录 一、Thymeleaf介绍 &#xff08;1&#xff09;依赖 &#xff08;2&#xff09;视图 &#xff08;3&#xff09;控制层 二、变量输出 三、操作字符串 四、操作时间 五、条件判断 六、遍历集合 &#xff08;1&#xff09;迭代遍历 &#xff08;2&#xff09;将遍…

webpack 基础配置

常见配置 文件打包的出口和入口webpack如何开启一台服务webpack 如何打包图片&#xff0c;静态资源等。webpack 配置 loader配置 plugin配置sourceMap配置 babel 语法降级等 接下来 &#xff0c; 我们先从webpack的基本配置 开始吧&#xff01; 在准备 配置之前 , 搭建一个 …

程序地址空间

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——程序地址空间 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;我们一直随口就能说出来的栈区&#xff0c;堆区&#xff0c;常量…

VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法

首先来看报错的makefile源码 再来看报错的信息&#xff1a; 第5行缺少分隔符&#xff0c;其实不止是第5行&#xff0c;只要是前面需要加tab留白的行都会报这个错误&#xff0c;比如说第7行第11行 编译的时候&#xff0c;前面的留白必须是按tab键生成的 但是&#xff01;&…