MaxKey?Casdoor+APISIX的协同场景

MaxKey?Casdoor+APISIX的协同场景

环境搭建

安装MaxKey

logo_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

favicon

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-white-bg

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 准备

第一步:创建组织

用户管理--->组织--->添加

image

填写内容--->保存

image

第二步:创建组群

用户管理--->组群--->添加

image

填写内容--->保存

image

第三步:创建用户

用户管理--->用户--->添加

image

填写内容--->保存

image

第四步:创建应用

身份认证--->应用--->添加

image

填写内容--->保存

aimage

image

image

备注说明:

  1. 组织需要选择对应的组织,且必须提前建好
  2. 从定向URL代表的是这个应用允许跳转的路径如图,配置了两个地址,一个是对应服务的,一个是apisix的回调地址,没有在这里配置的地址是没有办法做重定向的
  3. token和授权方式需要关联对应,如果选择了token但是授权方式中没有token,是无法授权鉴权的

ApiSix 准备

基于dashboard

第一步:创建上游

image

第二步:创建路由

基本信息

image

image

备注说明:

请求改写保留callback是为了集成casdoor,回调路径固定位/路由/callback,所以callback需要保留

设置上游

选择配置好的上游服务,其余信息自动带出,也可以直接手动填写,但是手动填写不会新增上游

image

插件配置(可选)

image

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

image

最后一直下一步直至保存

验证使用

配置信息

两个路由,其中 /r1/*​ 为配置了casdoor鉴权,/r2/*​ 未配置

image

/r1/* 验证

地址: http://192.168.100.196:9080/r1/getPort

image

用户名:hanchan

密码: 7uj8ik9ol

登陆后成功跳转目标接口

image

/r2/* 验证

地址: http://192.168.100.196:9080/r1/getPort

image

posted @ 2025-04-30 11:08  lcgyl  阅读(17)  评论(0)    收藏  举报