Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。
【资料图】
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/
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/
安装的版本为v3.5.X,请参照官方安装文档
https://www.maxkey.top/zh/conf/tutorial.html
登录到MaxKey后台管理
进入后台“应用管理”,编辑应用
配置主要明细入下
配置对应关系
序号 | 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默认适配器 | 适配器 |
如果不在该列表内,可以“新增成员”
安装的版本为v3.1,请参照官方安装文档
https://apisix.apache.org/zh/docs/apisix/installation-guide/
开源的 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。
1. Bearer Only: MaxKey支持账户密码或 AccessToken 进行身份认证,若启用 bearer_only 选项,则仅允许通过 AccessToken 进行认证,该方式适用于服务之间的访问认证;
2. Inst: MaxKey中的 Inst相当于一个租户,不同 Inst 是相互隔离的,只能管理和验证它们所具有的用户;
3. Scope:这是一种限制在访问令牌(AccessToken)中声明的角色的方法。例如,当一个客户端要求验证一个用户时,客户端收到的访问令牌将只包含范围明确指定的角色映射。客户端范围允许你限制每个单独的访问令牌的权限,而不是让客户端访问用户的所有权限;
4. User:User 是可以登录到 MaxKey的用户,可以思考下你所用过的 SSO 登录服务;
5. Client:客户端是指想要使用 MaxKey来保护的服务。
本示例使用 APISIX的默认服务 作为上游服务,它将返回请求中的所有内容。
本示例将引导客户端到登陆页通过账户密码的方式进行身份认证:
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"}
访问 http://192.168.0.105:9080/protectweb/ 时,由于未进行登录,因此将被引导到 MaxKey 的登录页面:
1、输入账号(admin)、密码(maxkey)完成登录后
2、成功跳转到 http://192.168.0.105:9080/protectweb/ 页面:
通过启用 bearer_only 参数对应用之间的调用进行身份认证,此时应用访问 APISIX 时需携带 Authorization Header,否则该请求将被拒绝。
{ "_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"}
未携带 X-Access-Token 访问 Apache APISIX 时将返回 401 表明未经授权:
curl -X GET -i "http://192.168.0.105:9080/protectapi/"
对应命令入下
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"
将 AccessToken 放于 Authorization 头中请求 APISIX(替换掉 ${AccessToken}),可以认证成功:
对应命令入下
curl -X GET -H "Authorization: Bearer 87d24b21-b9a5-472e-a405-e2ead4d1bb9f" -i "http://192.168.0.105:9080/protectapi/"
当启用 APISIX set_userinfo_header 配置后,认证成功后回调请求将携带 X-Userinfo 请求头,它包含了 User 的基本信息,可通过 base64_decode 获得用户内容。
因为 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
【全球新要闻】青海农牧民“村BA”鸣哨
环球热议:箭牌家居:已在浴室柜、浴室镜、龙头、淋浴房等品类上研发相应智能产品 将陆续投入市场
【环球快播报】代表委员履职故事|全国人大代表王银香:农民的事,就是我的事
安盛天平员工侵占投保人理赔款,内控存明显漏洞|世界快看点
人民日报:推动人工智能良性健康发展 更好地去为人类生产生活和社会发展服务 每日简讯
当前消息!如何在没有化学品的情况下摆脱木蜂
良臣难为_呜呼佞臣当道
天天讯息:青梅已逝竹马老去从此我爱的人都像你_从此我爱的人都像你
手脱皮怎么办吃什么水果_手脱皮怎么办
什么是鹅口疮_鹅口疮是什么 当前资讯
环球资讯:张小斐被打回原形,正好证明了娱乐圈的清醒
一帧中国丨经穴漆人揭示中医经脉密码(2023年2月19日)|视点
山东板桥酒业有限公司
天天日报丨铜阀门十大品牌排名_铜阀门十大品牌
宗师级钓鱼训练师贾克斯表情包_宗师级钓鱼训练师贾克斯|天天资讯
每日焦点!中建东孚首进京即“虎口夺食”,“中建八子”激进扫货冲规模
联想智能电视必装软件和安装方法_联想智能电视必装软件和安装方法不一样|当前快讯
浙江宁波:梅花盛开醉游人 时讯
全球热点评!猫足球训练官网在哪下载 最新官方下载安装地址
环球观热点:叙利亚霍姆斯超30人遭极端组织袭击死亡
重点聚焦!简单的折元宝_纸折元宝新折元宝
如何制作宽领运动衫_天天热推荐
包虫病的传染源_疟疾传染源传播途径
如何缝洞
首华燃气:若公司可转债有相关安排,将严格履行决策程序并进行信息披露
扬州盐务稽核分所
【快播报】最终智能_关于最终智能的基本详情介绍
环球即时看!世界银行拟放宽贷款比率 每年释放40亿美元资金
速看:mindmanager破解补丁_mindmanager破解版
每日热文:灰色空间歌词大全罗志祥_灰色空间 歌词
江苏公铁水空40天内累计发送旅客5896.9万人次 天天热议
环球短讯!赛尔号巨藤_赛尔号巨型树妖在哪
环球时讯:是发面馒头反的光!马思纯被丑男友的光芒照亮却遭回怼,为男方与蒋雯丽翻脸?
一月中国中小企业发展指数回升
热资讯!国税局长提名国会听证,承诺中产家庭查税比例不变
相关新闻