MaxKey?Casdoor+APISIX的协同场景
MaxKey?Casdoor+APISIX的协同场景
环境搭建
安装MaxKey
MaxKey 官网地址:官网地址
mysql相关初始化配置文件:gitee地址
nginx配置文件:gitee地址
基于docker compose
基于自有数据库
version: "3.8"
services:
# maxkey
maxkey-frontend:
image: maxkeytop/maxkey-frontend:latest
container_name: maxkey-frontend
hostname: maxkey-frontend
environment:
- TZ=Asia/Shanghai
ports:
- "8527:8527"
maxkey:
image: maxkeytop/maxkey:latest
container_name: maxkey
hostname: maxkey
environment:
- DATABASE_HOST=127.0.0.1 # 需要修改为自己的mysql数据库地址
- DATABASE_PORT=3306 # 需要修改为自己的mysql数据库端口
- DATABASE_NAME=maxkey
- DATABASE_USER=user # 需要修改为自己的mysql数据库用户名
- DATABASE_PWD=password # 需要修改为自己的mysql数据库密码
ports:
- "9527:9527"
maxkey-mgt:
image: maxkeytop/maxkey-mgt:latest
container_name: maxkey-mgt
hostname: maxkey-mgt
environment:
- DATABASE_HOST=127.0.0.1 # 需要修改为自己的mysql数据库地址
- DATABASE_PORT=3306 # 需要修改为自己的mysql数据库端口
- DATABASE_NAME=maxkey
- DATABASE_USER=user # 需要修改为自己的mysql数据库用户名
- DATABASE_PWD=password # 需要修改为自己的mysql数据库密码
- LOGIN_CAS_SERVER=http://maxkey-nginx/sign/authz/cas
ports:
- "9526:9526"
maxkey-mgt-frontend:
image: maxkeytop/maxkey-mgt-frontend:latest
container_name: maxkey-mgt-frontend
hostname: maxkey-mgt-frontend
environment:
- TZ=Asia/Shanghai
ports:
- "8526:8526"
maxkey-nginx:
image: nginx:latest
container_name: maxkey-nginx
hostname: maxkey-nginx
volumes:
- /data/maxkey/nginx:/etc/nginx/conf.d # 此处需要自行映射
ports:
- "8880:80"
基于全新的数据库
services:
mysql:
image: mysql:8.4.2
container_name: maxkey-mysql
hostname: maxkey-mysql
volumes:
- ./docker-mysql/data:/var/lib/mysql
- ./docker-mysql/logs:/var/log/mysql
- ./docker-mysql/conf.d:/etc/mysql/conf.d # 此处需要自行映射
- ./docker-mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d # 此处需要自行映射
environment:
- MYSQL_ROOT_PASSWORD=maxkey
ports:
- "3306:3306"
restart: always
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
maxkey-frontend:
image: maxkeytop/maxkey-frontend:latest
container_name: maxkey-frontend
hostname: maxkey-frontend
environment:
- TZ=Asia/Shanghai
ports:
- "8527:8527"
maxkey:
image: maxkeytop/maxkey:latest
container_name: maxkey
hostname: maxkey
environment:
- DATABASE_HOST=maxkey-mysql
- DATABASE_PORT=3306
- DATABASE_NAME=maxkey
- DATABASE_USER=root
- DATABASE_PWD=maxkey
ports:
- "9527:9527"
maxkey-mgt:
image: maxkeytop/maxkey-mgt:latest
container_name: maxkey-mgt
hostname: maxkey-mgt
environment:
- DATABASE_HOST=maxkey-mysql
- DATABASE_PORT=3306
- DATABASE_NAME=maxkey
- DATABASE_USER=root
- DATABASE_PWD=maxkey
- LOGIN_CAS_SERVER=http://maxkey-nginx/sign/authz/cas
ports:
- "9526:9526"
maxkey-mgt-frontend:
image: maxkeytop/maxkey-mgt-frontend:latest
container_name: maxkey-mgt-frontend
hostname: maxkey-mgt-frontend
environment:
- TZ=Asia/Shanghai
ports:
- "8526:8526"
maxkey-nginx:
image: nginx:latest
container_name: maxkey-nginx
hostname: maxkey-nginx
volumes:
- ./docker-nginx:/etc/nginx/conf.d # 此处需要自行映射
ports:
- "8080:80"
访问地址:
maxkey-mgt: http://服务器ip:8880/maxkey-mgt
maxkey:http://服务器ip:8880/maxkey
安装Casdoor

Casdoor官网:官网地址
配置文件地址:github地址
基于docker compose
version: "3"
services:
casdoor:
image: casbin/casdoor:latest
restart: always
container_name: casdoor
hostname: casdoor
volumes:
- /data/casdoor/config/app.conf:/conf/app.conf # 数据存储目录
ports:
- "8000:8000"
访问地址:
http://服务器ip:8000
安装APISIX
APISIX 官网地址:官方中文地址
dashboard/conf/conf.yaml: github地址
apisix/conf/config.yaml:github地址
基于docker compose
version: "3"
services:
# 可视化管理工具apisix-dashboard
apisix-dashboard:
image: apache/apisix-dashboard:2.7
restart: always
volumes:
- /data/apisix/dashboard/conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
ports:
- "9000:9000"
# 网关apisix
apisix:
image: apache/apisix:2.6-alpine
restart: always
volumes:
- /data/apisix/apisix/log:/usr/local/apisix/logs
- /data/apisix/apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
depends_on:
- etcd
##network_mode: host
ports:
- "9180:9180/tcp"
- "9080:9080/tcp"
- "9091:9091/tcp"
- "9443:9443/tcp"
- "9092:9092/tcp"
# apisix配置数据存储etcd
etcd:
image: bitnami/etcd:3.5.11
user: root
restart: always
volumes:
- /data/apisix/etcd/data:/bitnami/etcd
environment:
ETCD_ENABLE_V2: "true"
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ports:
- "2379:2379/tcp"
prometheus:
image: prom/prometheus:v2.25.0
restart: always
volumes:
- /data/apisix/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:7.3.7
restart: always
ports:
- "3000:3000"
volumes:
- "/data/apisix/grafana/provisioning:/etc/grafana/provisioning"
- "/data/apisix/grafana/dashboards:/var/lib/grafana/dashboards"
- "/data/apisix/grafana/conf/grafana.ini:/etc/grafana/grafana.ini"
选型对比MaxKey VS Casdoor
项目背景
-
Casdoor:
- 由 Casbin 社区开发,基于 Casbin 的权限管理框架。
- 主要目标是提供一个轻量级、易于集成的身份认证和权限管理平台。
- 支持多种认证协议(如 OAuth 2.0、OIDC、SAML 等)。
- 适合中小型企业和开发者快速集成。
-
MaxKey:
- 由国内开发者社区开发,专注于企业级统一身份认证。
- 提供更全面的企业级功能,支持多种认证协议和复杂的组织架构管理。
- 适合中大型企业或需要复杂权限管理的场景。
核心功能
-
Casdoor:
- 支持 OAuth 2.0、OIDC、SAML、LDAP 等协议。
- 提供用户管理、角色管理、权限管理等功能。
- 支持多租户架构。
- 提供简单的 UI 界面,易于配置和管理。
- 支持多种数据库(MySQL、PostgreSQL、SQLite 等)。
- 提供 RESTful API 和 SDK,方便集成。
-
MaxKey:
- 支持 OAuth 2.0、OIDC、SAML、CAS、LDAP 等协议。
- 提供更复杂的组织架构管理(如部门、岗位、角色等)。
- 支持多因素认证(MFA)。
- 提供审计日志和安全性监控功能。
- 支持动态令牌(OTP)和硬件令牌。
- 提供更丰富的企业级功能,如单点注销、会话管理等。
架构和技术栈
-
Casdoor:
- 基于 Go 语言开发,性能较高。
- 前端使用 React,界面简洁。
- 依赖 Casbin 进行权限管理。
- 部署简单,适合云原生环境。
-
MaxKey:
- 基于 Java 开发,依赖 Spring 框架。
- 前端使用传统技术(如 JSP、Thymeleaf)。
- 更适合传统的企业级 Java 应用场景。
- 部署相对复杂,需要 Java 环境支持。
易用性和扩展性
-
Casdoor:
- 轻量级,易于部署和集成。
- 适合中小型项目或开发者快速上手。
- 扩展性较强,支持插件化开发。
-
MaxKey:
- 功能更全面,适合复杂的企业级场景。
- 配置和管理相对复杂,需要一定的技术背景。
- 扩展性较好,但需要熟悉 Java 生态。
社区和生态
-
Casdoor:
- 由 Casbin 社区支持,社区活跃度较高。
- 文档较为完善,适合开发者快速上手。
- 生态相对较小,但发展迅速。
-
MaxKey:
- 国内社区支持较多,文档以中文为主。
- 适合国内企业使用,国际化支持较弱。
- 生态较为成熟,但更新速度较慢。
适用场景
-
Casdoor:
- 中小型项目或开发者个人项目。
- 需要快速集成身份认证和权限管理的场景。
- 云原生环境或微服务架构。
-
MaxKey:
- 中大型企业或需要复杂权限管理的场景。
- 传统企业级 Java 应用。
- 需要多因素认证和审计日志的场景。
总结
- 如果你需要一个轻量级、易于集成的身份认证解决方案,且项目规模较小,Casdoor 是更好的选择。
- 如果你需要更全面的企业级功能,且项目规模较大,MaxKey 可能更适合。
选择时可以根据项目需求、技术栈和团队熟悉度来决定。
使用教程
演示地址:
apisix: http://192.168.100.196:9080
apisix-dashboard: http://192.168.100.196:9000/
casdoor: http://192.168.100.196:8000/
Casdoor 准备
第一步:创建组织
用户管理--->组织--->添加

填写内容--->保存

第二步:创建组群
用户管理--->组群--->添加

填写内容--->保存

第三步:创建用户
用户管理--->用户--->添加

填写内容--->保存

第四步:创建应用
身份认证--->应用--->添加

填写内容--->保存
a


备注说明:
- 组织需要选择对应的组织,且必须提前建好
- 从定向URL代表的是这个应用允许跳转的路径如图,配置了两个地址,一个是对应服务的,一个是apisix的回调地址,没有在这里配置的地址是没有办法做重定向的
- token和授权方式需要关联对应,如果选择了token但是授权方式中没有token,是无法授权鉴权的
ApiSix 准备
基于dashboard
第一步:创建上游

第二步:创建路由
基本信息


备注说明:
请求改写保留callback是为了集成casdoor,回调路径固定位/路由/callback,所以callback需要保留
设置上游
选择配置好的上游服务,其余信息自动带出,也可以直接手动填写,但是手动填写不会新增上游

插件配置(可选)

插件配置信息: casdoor插件配置详情

最后一直下一步直至保存
验证使用
配置信息
两个路由,其中 /r1/* 为配置了casdoor鉴权,/r2/* 未配置

/r1/* 验证
地址: http://192.168.100.196:9080/r1/getPort

用户名:hanchan
密码: 7uj8ik9ol
登陆后成功跳转目标接口

/r2/* 验证
地址: http://192.168.100.196:9080/r1/getPort


浙公网安备 33010602011771号