当前位置: 首页 > news >正文

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

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";

相关文章:

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

1. Apache APISIX介绍 Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以…...

Linux之Xshell工具使用

shell简介Xshell是一个远程工具,可以远程连接linux系统 ,SSH,远程管理 Xshell来远程访问Linux系统的终端 。shell的英文含义是“壳”;它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表…...

【数据结构与算法】时间复杂度与空间复杂度

目录 一.前言 二.时间复杂度 1.概念 二.大O的渐进表示法 概念: 总结: 三.常见时间复杂度计算举例 例1 例2 例3 例4 例5.计算冒泡排序的时间复杂度 例6.二分算法的时间复杂度 例7.阶乘递归Fac的时间复杂度 例8.斐波那契递归的时间复杂度 …...

Nginx如何配置Http、Https、WS、WSS的方法步骤

这篇文章主要介绍了Nginx如何配置Http、Https、WS、WSS的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 写在前面 当今互联网领域,Nginx是使…...

【博客621】iptables -J动作总结

iptables -J动作总结 1、iptables常见动作 ACCEPTDROPREJECTLOGSNATDNATMASQUERADEREDIRECT 2、iptables常见动作用法 2-1、ACCEPT: 作用:用于接收匹配的流量,使得流量继续往后面的规则和链路去匹配 2-2、DROP 作用:用于丢弃匹…...

Chrome开发者工具:利用网络面板做性能分析

Chrome 开发者工具(简称 DevTools)是一组网页制作和调试的工具,内嵌于 Google Chrome 浏览器中。 Chrome 开发者工具有很多重要的面板,比如与性能相关的有网络面板、Performance 面板、内存面板等,与调试页面相关的有…...

SpringCloud系列(十三)[分布式搜索引擎篇] - ElasticSearch 的概念及 Centos 7 下详细安装步骤

打开淘宝, 搜索 狂飙 会出现各种价格有关狂飙的书籍, 当然也有高启强同款的孙子兵法!!! 如下图所示: 那么面对海量的数据, 如何快速且准确的找到我们想要的内容呢? 淘宝界面已经可以按照综合排序 / 销量 / 信用 / 价格等进行筛选, 是如何做到的呢? ElasticSearch 11 Elastic…...

04_Docker 镜像和仓库

04_Docker 镜像和仓库 文章目录04_Docker 镜像和仓库4.1 什么是 Docker 镜像4.2 列出 Docker 镜像4.3 拉取镜像4.4 查找镜像4.5 构建镜像4.5.1 创建 Docker Hub 账号4.5.2 用 Docker 的 commit 命令创建镜像4.5.3 用 Dockerfile 构建镜像4.5.5 基于 Dockerfile 构建新镜像4.5.5…...

postman-enterprise-API

Postman 是一个用于构建和使用 API 的 API 平台。Postman 简化了 API 生命周期的每个步骤并简化了协作,因此您可以更快地创建更好的 API。 API存储库 在一个中央平台上围绕您的所有 API 工件轻松存储、编目和协作。Postman 可以存储和管理 API 规范、文档、工作流配…...

【ESP 保姆级教程】玩转emqx MQTT篇② ——保留消息和遗嘱消息

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-18 ❤️❤️ 本篇更新记录 2023-02-18 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

开启慢查询日志方法

步骤 开启慢查询日志 SET GLOBAL slow_query_log on;SHOW VARIABLES like slow_query_log;设置时间限制 SET GLOBAL long_query_time 1; -- 单位sSHOW VARIABLES LIKE %long_query_time%;因为long_query_time参数只对新的数据库连接生效,所以还需要重启msql客户端…...

宝塔搭建实战人才求职管理系统admin前端vue源码(二)

大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享骑士cms后台端在宝塔的搭建部署方式,这套系统是前后端分离的架构,前端是用vue2开发的,还需要在本地打包手动发布上宝塔,所以本期给大家分享&#x…...

SpringMVC——基础知识

基本概念 SpringMVC是基于servlet api构造的原始web框架,全称是Spring Web MVC 而MVC的全称是Model View Controller,翻译成中文分别是“模型”,“视图”,“控制器”,这是一种软件的架构模式 Model:用来…...

论文浅尝 | SpCQL: 一个自然语言转换Cypher的语义解析数据集

笔记整理:郭爱博,国防科技大学博士论文发表会议:The 31th ACM International Conference on Information and Knowledge Management,CIKM 2022动机随着社交、电子商务、金融等行业的快速发展,现实世界编织出一张庞大而…...

MongoDB 使用规范与限制及最佳实践

MongoDB 灵活文档的优势 灵活库/集合命名及字段增减同一字段可存储不同类型数据Json 文档可多层次嵌套文档对于开发而言最自然的表达 MongoDB 灵活文档的烦恼 数据库集合字段名千奇百怪同一字段数据类型各不一样业务异常可能写入“脏”数据 1.1 库命名规范 不能为空字符串 &…...

第五十六章 树状数组(一)

第五十六章 树状数组一、前缀和的缺陷二、树状数组1、作用2、算法分析3、算法实现(1)lowbits()(2)插入(3)查询三、例题1、问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示2、代码一、前缀和…...

kubernetes教程 --Pod控制器详解

Pod控制器详解 介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod&am…...

N2750A Agilent Keysight HP 差分探头1.5GHz

N2750A Agilent Keysight HP 差分探头13554860890 N2750A 是 Agilent Keysight HP 的 1.5 GHz 差分探头。 特征: N2750A:1.5 GHz 衰减比:2:1 或 10:1(可切换) 动态范围: 5 V 或 10 Vpp(10:1 时…...

一文搞懂Linux内核进程CPU调度基本原理

为什么需要调度 进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下&#…...

java ssm爱宠宠物医院挂号预约系统管理系统设计与实现

本课题所实现的宠物医院网站是基于网页,它可以实现网上预约挂号,评价等基本功能。用户只要手边有一部手机或者一台电脑,可以上网浏览网页,便可以使用本系统,没有时间和地点的限制,使得就医预约,…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...