使用开源 MaxKey 与 APISIX 网关保护你的 API

news2024/11/15 6:50:11

1. Apache APISIX介绍

Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。

1.1. 特色优势

n 多平台支持:APISIX 提供了多平台解决方案,它不但支持裸机运行,也支持在 Kubernetes 中使用,还支持与 AWS Lambda、Azure Function、Lua 函数和 Apache OpenWhisk 等云服务集成。

n 全动态能力:APISIX 支持热加载,这意味着你不需要重启服务就可以更新 APISIX 的配置。请访问为什么 Apache APISIX 选择 Nginx + Lua 这个技术栈?以了解实现原理。

n 精细化路由:APISIX 支持使用 NGINX 内置变量做为路由的匹配条件,你可以自定义匹配函数来过滤请求,匹配路由。

n 运维友好:APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。

n 多语言插件支持:APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。

官方网站地址:https://apisix.apache.org/

2. MaxKey介绍

Dromara MaxKey社区以“安全连接、传递信任”为宗旨,专注于身份安全管理(IM)、单点登录(SSO)和云身份认证(IDaas)领域,将为客户提供企业级的身份管理和认证,提供全面的4A安全管理(指Account,Authentication,Authorization和Audit)。

为企业提供社区版IAM产品,减少企业建设IAM的成本;同时提供企业版的IAM咨询和技术支持,从而提高客户体验和降低企业内部的自开发成本。

MaxKey单点登录认证系统,谐音为马克思的钥匙寓意是最大钥匙,是业界领先的IAM-IDaas身份管理和认证产品;支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议;提供标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、资源管理和权限管理等;开源、安全、自主可控。

官方网站地址:https://www.maxkey.top/

3. MaxKey安装配置

安装的版本为v3.5.X,请参照官方安装文档

https://www.maxkey.top/zh/conf/tutorial.html

3.1. 登录管理控制台

登录到MaxKey后台管理

3.2. 应用配置

进入后台“应用管理”,编辑应用

配置主要明细入下

配置对应关系

序号

MaxKey

参数

备注

1

登录地址

http://192.168.0.105:9080/protectweb

2

访问协议

OAuth2.0

3

回调地址

http://192.168.0.105:9080/protectweb/callback

4

授权方式

authorization_code password  client_credentials

5

适配

启用

适配

6

适配器

OAuth2.0默认适配器

适配器

3.3. 应用访问赋权

如果不在该列表内,可以“新增成员”

4. APISIX安装配置

安装的版本为v3.1,请参照官方安装文档

https://apisix.apache.org/zh/docs/apisix/installation-guide/

5. 场景示例

开源的 API 网关 Apache APISIX 支持使用 openid-connect 插件对接以上身份认证服务,APISIX 会将所有未认证的请求重定向至身份认证服务的登录页,当登录成功后 APISIX 会将获取到的用户信息发送至上游服务。

下图为 OpenID Connect 协议交互流程:

在重定向阶段(Redirect),IdP 将用户重定向到一个预先配置好的重定向 URL(redirect_url),例如 http://192.168.0.105:9080/protectweb/callback。请注意:这是一个在 APISIX 中不存在的 API,它只用于捕获相关的请求,并在 OIDC 逻辑中完成 Token 交换的功能。请不要使用这个地址作为触发 OIDC 插件重定向的条件,否则,它将返回如下错误:the error request to the redirect_uri path, but there's no session state found。

5.1. 相关术语

1. Bearer Only: MaxKey支持账户密码或 AccessToken 进行身份认证,若启用 bearer_only 选项,则仅允许通过 AccessToken 进行认证,该方式适用于服务之间的访问认证;

2. Inst: MaxKey中的 Inst相当于一个租户,不同 Inst 是相互隔离的,只能管理和验证它们所具有的用户;

3. Scope:这是一种限制在访问令牌(AccessToken)中声明的角色的方法。例如,当一个客户端要求验证一个用户时,客户端收到的访问令牌将只包含范围明确指定的角色映射。客户端范围允许你限制每个单独的访问令牌的权限,而不是让客户端访问用户的所有权限;

4. User:User 是可以登录到 MaxKey的用户,可以思考下你所用过的 SSO 登录服务;

5. Client:客户端是指想要使用 MaxKey来保护的服务。

5.2. 前置条件

本示例使用 APISIX的默认服务 作为上游服务,它将返回请求中的所有内容。

5.3. 场景一:使用账户密码保护上游服务

本示例将引导客户端到登陆页通过账户密码的方式进行身份认证:

5.3.1. 创建一条路由

APISIX登录

路由创建,配置如下

{
 "_meta": {
 "disable": false
  },
 "bearer_only": false,
 "client_id": "ae20330a-ef0b-4dad-9f10-d5e3485ca2ad",
 "client_secret": "KQY4MDUwNjIwMjAxNTE3NTM1OTEYty",
 "discovery": "http://192.168.0.104/sign/authz/oauth/v20/1/.well-known/openid-configuration?client_id=ae20330a-ef0b-4dad-9f10-d5e3485ca2ad",
 "introspection_endpoint": "",
 "introspection_endpoint_auth_method": "",
 "logout_path": "/protectapi/logout",
 "realm": "1",
 "redirect_uri": "http://192.168.0.105:9080/protectweb/callback"
}

复制

5.3.2. 访问未授权地址

访问 http://192.168.0.105:9080/protectweb/ 时,由于未进行登录,因此将被引导到 MaxKey 的登录页面:

5.3.3. 授权应用访问

1、输入账号(admin)、密码(maxkey)完成登录后

2、成功跳转到 http://192.168.0.105:9080/protectweb/ 页面:

5.4. 场景二:使用 AccessToken 验证身份

通过启用 bearer_only 参数对应用之间的调用进行身份认证,此时应用访问 APISIX 时需携带 Authorization Header,否则该请求将被拒绝。

5.4.1. 创建一条路由

{
 "_meta": {
 "disable": false
  },
 "bearer_only": true,
 "client_id": "ae20330a-ef0b-4dad-9f10-d5e3485ca2ad",
 "client_secret": "KQY4MDUwNjIwMjAxNTE3NTM1OTEYty",
 "discovery": "http://192.168.0.104/sign/authz/oauth/v20/1/.well-known/openid-configuration",
 "introspection_endpoint": "http://192.168.0.104/sign/authz/oauth/v20/introspect",
 "introspection_endpoint_auth_methods_supported": [
 "client_secret_basic"
  ],
 "logout_path": "/protectweb/logout",
 "realm": "1",
 "redirect_uri": "http://192.168.0.105:9080/protectweb/callback"
}

复制

5.4.2. 访问未授权地址

未携带 X-Access-Token 访问 Apache APISIX 时将返回 401 表明未经授权:

curl -X GET -i 'http://192.168.0.105:9080/protectapi/'

5.4.3. 调用 MaxKey API 获取 AccessToken:

对应命令入下

curl -X GET -i 'http://192.168.0.104/sign/authz/oauth/v20/token?grant_type=password&username=admin&client_id=ae20330a-ef0b-4dad-9f10-d5e3485ca2ad&client_secret=KQY4MDUwNjIwMjAxNTE3NTM1OTEYty&password=maxkey'

复制

5.4.4. 携带AccessToken访问

将 AccessToken 放于 Authorization 头中请求 APISIX(替换掉 ${AccessToken}),可以认证成功:

对应命令入下

curl -X GET -H 'Authorization: Bearer 87d24b21-b9a5-472e-a405-e2ead4d1bb9f' -i 'http://192.168.0.105:9080/protectapi/'

复制

5.5. 场景三:上游服务解析 UserInfo 信息

当启用 APISIX set_userinfo_header 配置后,认证成功后回调请求将携带 X-Userinfo 请求头,它包含了 User 的基本信息,可通过 base64_decode 获得用户内容。

6. 常见问题

因为 APISIX 会将 id_token、access_token、refresh_token 等值写入 Cookie 中,因此整个 Cookie 内容比较长。具体实现可阅读 lua-resty-openidc 库中设置 session 的逻辑。

目前 openid-connect 插件未提供自定义这部分配置的能力,因此可以使用 lua-resty-session 中提供的方法:通过 NGINX 变量的方式对其默认配置进行覆盖。 此处借助 APISIX 提供的 NGINX 配置注入能力以实现覆盖:通过在配置文件 {apisix}/conf/config.yaml 中添加这些代码,可修改 Session 存储 Cookie 的名称:

nginx_config: http_server_configuration_snippet: | set $session_name "session_override";

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

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

相关文章

黑马redis学习记录:缓存

一、介绍 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 缓存无处不在 为什么要使用缓存? 因为速度快,好用缓存数据存储于代码中,而…

海外问卷调查答题技巧,纯干货分享,新手小白看过来

海外问卷调查为什么别人赚得盆满钵满而我却连通过都不行?是不是经常有人发出这种疑问,东哥作为一个结交过很多做问卷调查行业的跨境人士,也了解到很多做这一行的去答题的时候都是掌握一定技巧的,而不是去乱答。今天东哥就来说说国…

算法笔记(七)—— 图的相关知识及算法

图的存储方式 1. 邻接表&#xff08;记录关于某点的直接相邻点&#xff09; 2. 邻接矩阵&#xff08;一定是正方形的矩阵&#xff0c;对点进行编号&#xff0c;点到点的权值由距震中的值表示&#xff0c;无直接相连记为正无穷&#xff09; 图的模板 unordered_map<int,No…

React(二) —— 组件间的通信方式

&#x1f9c1;个人主页&#xff1a;个人主页 ✌支持我 &#xff1a;点赞&#x1f44d;收藏&#x1f33c;关注&#x1f9e1; 文章目录⛳组件通信的方式&#x1f680;父子组件通信方式父传子子传父ref标记&#xff08;传递数据&#xff09;⛪非父子组件通信方式状态提升&#xf…

微信小程序反编译方法分享

文章目录一、前言二、准备工作&#xff08;一&#xff09;安装Nodejs&#xff08;二&#xff09;解密和逆向工具三、小程序缓存文件解密&#xff08;一&#xff09;定位小程序缓存路径&#xff08;二&#xff09;源码解密&#xff08;三&#xff09;源码反编译四、小结一、前言…

【神级Python代码】作为技术xiao白如何制作一款超炫酷的黑客主题代码雨?牛逼就完了。(源码分享学习)

前言 哈喽&#xff0c;我是木子&#xff0c;今天给大家制作一款超级炫酷的代码啦。 提到《黑K帝国》&#xff0c;字符雨可谓是让人印象深刻。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 ​…

KD04丨震荡动量_波段王

大家好&#xff0c;今天我们分享可达鸭系列第4篇策略——震荡动量。 该篇策略来自于2021-2022年度&#xff0c;量化杂志翻译系列——费雪逆变换。如下图所示&#xff1a; 2023年度加入股票和期货社群&#xff0c;均可以获得当年免费12期历史12期的量化杂志资…

Mysql UDF提权复现Raven2

Raven2通关过程 主要通过Raven2靶机进行复现Mysql UDF提权&#xff0c;以下为通关过程。 靶机镜像&#xff1a;https://www.vulnhub.com/entry/raven-2,269/ 信息收集 拿到靶机ip&#xff1a;192.168.112.129 nmap -sP 192.168.112.0/24探测开放端口&#xff0c;nmap用烂了…

硬件系统工程师宝典(8)-----初识电源完整性分析

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到信号的时序设计需要保证数据和时钟信号同步传输。今天我们开始学习电源完整性分析需要考虑什么&#xff1f; PI分析概述 电源完整性…

2023年湖南建筑八大员(材料员)模拟真题及答案

百分百题库提供建筑八大员&#xff08;材料员&#xff09;考试试题、建筑八大员&#xff08;材料员&#xff09;考试预测题、建筑八大员&#xff08;材料员&#xff09;考试真题、建筑八大员&#xff08;材料员&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

2023年美赛C题 预测Wordle结果Predicting Wordle Results 更新时间&#xff1a;2023-2-17 11:30 1 题目 2023年MCM 问题C:预测Wordle结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e059d917333e497e90ca082605869e3c.png#pic_center) Wordle是纽约时报目前每天提…

对于EVM系链交易缓冲池txpool的理解

区块链就是和交易打交道&#xff0c;我们今天就介绍下&#xff0c;交易处理过程中的一个重要组成部分&#xff1a;txpool。这篇文章主要从功能角度介绍&#xff0c;通过这篇文章会了解&#xff1a; txpool的在交易中的位置和作用。txpool的功能&#xff0c;核心组成部分queued…

停车辅助系统的技术和变化

各种各样的停车辅助系统已经存在了很长时间&#xff0c;但用户经常在不知道什么技术以及它是如何工作的情况下使用它们。 今天我们依次来谈谈停车辅助系统是什么&#xff0c;怎么发展以及如何应用的。 ​ 1.手信号 您可能会想&#xff0c;“为什么手信号是停车辅助系统&#x…

变电站如何解决人力不足问题?这个技能划重点

随着企业的管理水平的不断提高&#xff0c;各企业都建立的大大小小的数据机房。由于机房的大小不同、监测内容不同&#xff0c;费用也不尽相同&#xff0c;而数据机房存储着大量的珍贵数据&#xff0c;一旦丢失损毁会给企业造成不可挽回的损失。 变电站安装机房动环监控系统4大…

MySQL索引类型——有五种

文章目录前言一、MySQL中的索引类型有以下几种1.1 普通索引1.1.1 直接创建索引1.1.2 修改结构的方式添加索引1.1.3 创建表的时候同时创建索引1.1.4 删除索引1.2 唯一索引1.2.1 创建唯一索引1.2.2 修改表结构1.2.3 创建表的时候直接指定1.3 主键索引1.4 组合索引1.5 全文索引1.5…

EdrawMax 12.0.7 Ultimate 多语言版

EdrawMax多合一图表软件。获得市场上最强大、最专业的图表软件。现在比较一下&#xff0c;看看为什么 Lucidchart 是更好的图表解决方案。超过 10,000,000 多个用户。专用支持。Visio 导入和导出。图表和流程图进行可视化、创新和协作创建强大的流程图和视觉效果&#xff0c;以…

个人开源PCB开发板列表汇总

个人开源PCB开发板列表汇总✨首先感谢立创EDA的免费打样和立创一起开源的广大网页。 &#x1f530;STC单片机为主控开源PCB开发板列表 &#x1f4cc;STC15F2K60S2开发板&#xff1a;https://oshwhub.com/perseverance51/stc15f2k60s2-ji-tong-ban &#x1f4cc;STC15W408AS系…

Python3 输入和输出实例及演示

在前面几个章节中&#xff0c;我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第3种方式是使用文件对象的 write() 方法&#xff0c;标准输出文件可以用 sys.std…

机器学习洞察 | 一文带你“讲透” JAX

在上篇文章中&#xff0c;我们详细分享了 JAX 这一新兴的机器学习模型的发展和优势&#xff0c;本文我们将通过 Amazon SageMaker 示例展示如何部署并使用 JAX。JAX 的工作机制JAX 的完整工作机制可以用下面这幅图详细解释:图片来源&#xff1a;“Intro to JAX” video on YouT…

python 的selenium自动操控浏览器教程(2)

人生苦短&#xff0c;我用py 文章目录人生苦短&#xff0c;我用py关于部分网页无法找到元素的问题1方案1方案2关于部分网页无法找到元素的问题2解决方案被网站检查出来我们使用了selenium了怎么办&#xff1f;如何实现前进后退当使用py删除文件时报禁止访问怎么办怎么使用py实现…