使用apisix+oidc+casdoor配置微服务网关

一、服务架构图

在这里插入图片描述

二、安装配置

1. 安装配置apisix

(1). 快速启动及验证:
curl -sL https://run.api7.ai/apisix/quickstart | sh

该命令启动 apisix-quickstart 和 etcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 host 网络模式,因此可以从本地直接访问。

如果一切顺利,将输出如下信息:

✔ APISIX is ready!

通过 curl 来访问正在运行的 APISIX 实例。比如,你可以发送一个简单的 HTTP 请求来验证 APISIX 运行状态是否正常:

curl "http://127.0.0.1:9080" --head | grep Server

如果一切顺利,将输出如下信息:

Server: APISIX/Version
(2). 其他安装方式

APISIX 安装指南

(3). 介绍如何修改服务配置

APISIX 会通过apisix/cli/ngx_tpl.lua这个模板和conf/config-default.yamlconf/config.yaml生成 Nginx 的配置文件,因此直接修改 Nginx 的配置文件是无效的。
进入容器,可以在/usr/local/apisix/conf/nginx.conf看到生成的 Nginx 配置文件。 在自定义 Nginx 配置文件之前,烦请仔细阅读conf/config-default.yaml
conf/config.yaml里面可以覆盖掉默认值。举个例子,你可以通过xxx_snippet之类的配置,在conf/nginx.conf里面注入你的自定义配置: 注意nginx_config及其子项的格式缩进,在执行./bin/apisix start时,错误的缩进将导致更新conf/nginx.conf文件失败。

在config.yaml文件,有一些snippet:

main_configuration_snippet: |
http_configuration_snippet: |
http_server_configuration_snippet: |
http_server_location_configuration_snippet: |
http_admin_configuration_snippet: |
http_end_configuration_snippet: |
stream_configuration_snippet: |

在其下面添加内容会生成到nginx.conf文件中指定位置。比如:http_server_location_configuration_snippet下写的内容会加入在 #http server location configuration snippet starts下
在这里插入图片描述
比如在config.yaml中进行以下配置:

http_server_location_configuration_snippet: |proxy_set_header   X-Forwarded-For     off;proxy_set_header   X-Forwarded-Proto    $var_x_forwarded_proto;proxy_set_header   X-Forwarded-Host     $var_x_forwarded_host;proxy_set_header   X-Forwarded-Port     $var_x_forwarded_port;

会在生成的nginx.conf以下位置中添加配置

# http server location configuration snippet startsproxy_set_header   X-Forwarded-For     off;proxy_set_header   X-Forwarded-Proto    $var_x_forwarded_proto;proxy_set_header   X-Forwarded-Host     $var_x_forwarded_host;proxy_set_header   X-Forwarded-Port     $var_x_forwarded_port;
1). 修改log级别

例如将log级别改为debug,在config.yaml中添加如下配置:

nginx_config:
#  http_configuration_snippet: |
#    client_header_buffer_size 16k; # 调整允许的请求头大小,最大为16kerror_log_level:  debug

https://apisix.apache.org/docs/apisix/FAQ/#how-do-i-change-apache-apisixs-log-level

2). 配置apisix使用redis存储session,解决OIDC默认使用cookie来存储加密后的jwt导致request header too large问题
nginx_config:http_server_configuration_snippet: |set $session_storage redis;set $session_secret 623q4hR325t36VsCD3g567922IC0073T;set $session_redis_host 172.25.0.11;set $session_redis_port 6379;set $session_redis_ssl off;set $session_redis_ssl_verify off;

https://github.com/apache/apisix/issues/6792#issuecomment-1126999266

(4). apisix常用命令

当 APISIX 启动时,Admin API 默认情况下将会监听 9180 端口,并且会占用前缀为 /apisix/admin 的 API。

因此,为了避免你设计的 API 与 /apisix/admin 冲突,你可以通过修改配置文件 /conf/config.yaml 中的配置修改默认监听端口。

APISIX 支持设置 Admin API 的 IP 访问白名单,防止 APISIX 被非法访问和攻击。你可以在 ./conf/config.yaml 文件中的 deployment.admin.allow_admin 选项中,配置允许访问的 IP 地址。

在下文出现的 X-API-KEY 指的是 ./conf/config.yaml 文件中的 deployment.admin.admin_key.key,它是 Admin API 的访问 token。

1). 查看路配置
curl http://127.0.0.1:9180/apisix/admin/routes  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
2). 删除路由配置
curl -i -X DELETE http://127.0.0.1:9180/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
3). 创建/更新路由配置
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{"id": "getting-started-ip","uri": "/ip","upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}}
}'

详情可查看apisix官网文档: https://apisix.apache.org/docs/apisix/admin-api/

2. 安装配置casdoor

(1). 使用docker安装
docker run -p 8000:8000 casbin/casdoor-all-in-one

在这里插入图片描述
默认账号密码为:admin/123

(2). 配置casdoor

在这之前介绍一些casdoor的基本概念。
组织是Casdoor的基本单位,它管理着用户和应用,组织之间是相互隔离的。 如果一个用户登录到一个组织,他可以在无需再次登录的情况下访问属于该组织的所有应用。
根据架构图,casdoor作为认证中心,apisix是需要接入到casdoor的一个应用。

1). 创建组织

在这里插入图片描述
在这里插入图片描述

2). 创建应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3). 创建用户

在这里插入图片描述
在这里插入图片描述

3. 将casdoor配置为apisix的认证中心

1). 创建oidc插件

它的作用是,当创建的路由引用这个插件时,如果用户未登录,拦截用户的请求

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1000 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{"desc": "test-oidc","plugins": {                 "openid-connect":{                                              "client_id": "11f0f7aedeadf26f266c","client_secret": "8e30fc2463344170d8e05ec63d5a3056c8e605fa","discovery": "http://192.168.237.1:8000/.well-known/openid-configuration","bearer_only": false,"realm": "master","introspection_endpoint_auth_method": "client_secret_basic","redirect_uri":"http://192.168.237.1:9080/callback"}}
}'
2). 创建静态文件路由,允许直接访问静态文件

下面的静态服务可以用nginx打包一个容器来私服静态文件

curl http://127.0.0.1:9180/apisix/admin/routes/2000 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"uri": "/*","host": "test_domain.com","vars": [["uri", "~~", ".(js|css|flash|media|jpg|png|gif|ico|svg|json)$"]],"upstream":{"type": "roundrobin","nodes":{"static-service:80":1}}
}'
3). 拦截余下所有路径请求

下面的plugin_config_id即为引用的oidc插件id,当请求网站根路径时,会自动跳转到casdoor,当用户未登录请求非静态文件路径时,会报错。

curl http://127.0.0.1:9180/apisix/admin/routes/3000 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"uri": "/*","host": "test_domain.com","enable_websocket":true,"plugin_config_id": 1000,"upstream":{"type": "roundrobin","nodes":{"api-service:80":1}}
}'

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

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

相关文章

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…

STM32中断详解

STM32中断详解 NVIC 中断系统中断向量表相关寄存器中断优先级中断配置 外部中断实验EXTI框图外部中断/事件线映射中断步骤初始化代码实现 定时器中断通用定时器相关功能标号1:时钟源标号 2:控制器标号 3:时基单元 代码实现 NVIC 中断系统 STM…

常见的中间件漏洞

1.tomcat 1.1 CVE-2017-12615(put上传) 当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产 ⽣,(需要允许put请求) , 攻击者可以利⽤PUT方法通过精心构造的数据包…

【JAVA】神经网络的基本结构和前向传播算法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…

Qt 12.28 day3

作业: 1】 思维导图 2】 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&a…

Ubuntu 20.04.1 LTS搭建nginx + php7.4运行环境

本文基于https://www.rosehosting.com/blog/how-to-install-php-7-4-with-nginx-on-ubuntu-20-04/的翻译和实践记录。 安装 Nginx 默认情况下,最新版本的 Nginx 位于 Ubuntu 20.04 默认存储库中。您可以使用以下命令安装它: apt-get install nginx -y…

【专题】2024年出口跨境电商促销趋势白皮书报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38722 在当今全球化加速演进、数字经济蓬勃发展的大背景下,跨境电商行业正以前所未有的态势重塑国际贸易格局,成为各方瞩目的焦点领域。 根据亚马逊发布的《2024年出口跨境电商促销趋势白皮书》,…

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用

【数据仓库】spark大数据处理框架

文章目录 概述架构spark 架构角色下载安装启动pyspark启动spark-sehll启动spark-sqlspark-submit经验 概述 Spark是一个性能优异的集群计算框架,广泛应用于大数据领域。类似Hadoop,但对Hadoop做了优化,计算任务的中间结果可以存储在内存中&a…

【Elasticsearch】集群配置深度解析与实践

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

Three.js教程004:坐标辅助器与轨道控制器

文章目录 坐标辅助器与轨道控制器实现效果添加坐标辅助器添加轨道控制器完整代码完整代码下载坐标辅助器与轨道控制器 实现效果 添加坐标辅助器 创建坐标辅助器: const axesHelper = new Three.AxesHelper(5);添加到场景中: scene.

紫光展锐推出高性能四核4G 智能穿戴平台W377E,应用场景更丰富

近日,紫光展锐正式推出高性能4G 智能穿戴平台W377E。该产品面向不同的应用场景,拥有丰富特性和超低功耗,进一步壮大紫光展锐的智能穿戴产品组合。紫光展锐面向中高端和海量的智能穿戴市场,持续提供技术先进、高效安全、高质可靠的…

Android着色器SweepGradient渐变圆环,Kotlin

Android着色器SweepGradient渐变圆环,Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.SweepGradient import android…

ES elasticsearch-8.17.0-windows-x86_64使用

1、下载ES(elasticsearch 简称 ES 下载链接:https://www.elastic.co/downloads/elasticsearch) ES 下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-windows-x86_64.zip)),需要在修改ES配置&#xff0…

MySQL DBA需要掌握的 7 个问题

1. MySQL适用的场景是什么? 数据量建议单实例T级或以内,不依赖存储过程、函数、触发器的传统oltp场景都适用,因为是一个相对轻量级的数据库 灾备使用MySQL各类的高可用方案即可,比如主从、mha、mgr等。 2. MySQL巡检应该怎么做…

柱状图中最大的矩形 - 困难

************* c topic: 84. 柱状图中最大的矩形 - 力扣(LeetCode) ************* chenck the topic first: Think about the topics I have done before. the rains project comes:盛最多水的容器 - 中等难度-CSDN博客https://blog.csdn.net/ElseWhe…

【SQL server】教材数据库(5)

使用教材数据库(1)中的数据表完成以下题目: 1 根据上面基本表的信息定义视图显示每个学生姓名、应缴书费 2 观察基本表数据变化时,视图中数据的变化。 3利用视图,查询交费最高的学生。 1、create view 学生应缴费视…

spring入门程序

安装eclipse https://blog.csdn.net/qq_36437991/article/details/131644570 新建maven项目 安装依赖包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

Spring-Mybatis 2.0

前言&#xff1a; 第一点&#xff1a;过于依赖代码生成器或AI&#xff0c;导致基于mybaits的CRUD通通忘了&#xff0c;所以为了找回遗忘的记忆&#xff0c;有了该系列内容。 第二点&#xff1a;通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能…

在线免费批量生成 Word 文档工具

为了方便的批量生成 Word 文档&#xff0c;写了个在线 Word 文档批量生成工具&#xff0c;可以根据 Excel 数据和 Word 模板批量生成大量个性化的 Word 文档。适用于需要批量生成格式统一但内容不同的文档场景。比如&#xff1a; 批量生成证书、奖状批量生成合同、协议批量生成…