Casdoor-企业微信-JumpServer-部署手册

Casdoor 对接企业微信并为 JumpServer 提供 CAS 单点登录部署手册

  • 文档编制日期:20260904
  • 验证状态:已完成端到端验证
  • 适用场景:通过 1Panel 部署 Casdoor,使用企业微信自建应用作为身份源,再由 Casdoor 以 CAS 协议接入 JumpServer 4.0 LTS 系列
  • 脱敏说明:文中域名、IP、组织名称、文件名和路径均为示例值,部署时请替换

1. 部署结果

本方案已经完成以下验证:

  • 多名企业微信测试用户均可扫码并授权登录。
  • Casdoor 能通过企业微信识别用户。
  • JumpServer 能自动创建首次登录的用户。
  • JumpServer 中的中文姓名显示正确。
  • 用户注销后不能直接返回 JumpServer 工作台,再次进入时需要重新完成登录。
  • Casdoor 登录页面只显示“企业微信”登录入口,不再向普通用户展示注册、用户名、密码、验证码、找回密码等入口。
  • 当前企业微信授权范围不返回邮箱,因此 Casdoor 的用户邮箱为空,JumpServer 自动生成了形如 <企业微信用户 ID>@example.com 的占位邮箱。这不影响当前登录。

2. 架构与登录流程

企业微信CasdoorJumpServer用户浏览器企业微信CasdoorJumpServer用户浏览器访问 CAS 登录入口跳转到 Casdoor CAS 登录地址打开 Casdoor 登录页仅显示企业微信登录入口扫码并确认授权返回 OAuth 授权结果携带 CAS Service Ticket 返回使用 CAS 3.0 校验 Ticket返回用户名、姓名、邮箱等属性登录成功;首次登录时自动创建用户

这里包含两层协议:

  1. 企业微信到 Casdoor:使用 OAuth。
  2. Casdoor 到 JumpServer:使用 CAS 3.0。

3. 示例环境信息

项目示例值说明
Casdoor 所在服务器<Casdoor 内网 IP>请替换为实际内网地址
Casdoor 访问地址https://cas.example.com/示例域名;部署时替换
JumpServer 访问地址https://jumpserver.example.com/示例域名;部署时替换
Casdoor 组织名称example-org示例名称;部署时替换
Casdoor 应用名称jumpserverCasdoor 内部唯一名称
Casdoor 应用显示名称堡垒机登录页显示名称
企业微信 Provider 名称provider_wecom示例名称;部署时替换
企业微信 Provider 显示名称企业微信登录页按钮文字
Casdoor 应用类型CAS为 JumpServer 提供 CAS 服务
JumpServer CAS 版本3CAS 3.0
计划部署目录<Casdoor 实际安装目录>以 1Panel“已安装应用”页面显示为准

3.1 数据库信息

项目
数据库类型MySQL
数据库位置<数据库服务器地址> 上已有的 MySQL
数据库用户1panel自动生成
数据库密码1panel自动生成
数据库主机名/IP1panel自动生成
数据库端口1panel自动生成
数据库名称1panel自动生成

数据库连接参数由 1Panel 自动生成和管理。需要排障、迁移或恢复时,从“已安装应用 → Casdoor → 参数/详情”读取实际值,不要根据本手册猜测。

3.2 企业微信参数

项目
企业 ID(CorpID)按实际填写
自建应用 AgentId按实际填写
自建应用 Secret按实际填写
应用可见范围已包含测试用户
Casdoor 公网出口可信 IP按实际公网出口/NAT IP 填写

4. 第一阶段:通过 1Panel 部署 Casdoor

4.1 前置条件

开始前确认:

  • Casdoor 服务器已安装并可登录 1Panel。
  • MySQL 已正常运行。
  • 已准备供 Casdoor 使用的数据库。
  • cas.example.com 已完成所需的 DNS 解析。
  • Casdoor 站点的 HTTPS 端口已正确映射。
  • 已有 cas.example.com 的有效 HTTPS 证书。
  • Casdoor 服务器可以访问企业微信的 OAuth/API 地址。

4.2 确认 MySQL 数据库

通过 1Panel 安装 Casdoor 时,可使用面板自动生成的 MySQL 数据库连接参数,包括数据库名、用户、密码、主机名和端口。

安装前后需要确认:

  • 1Panel 管理的 MySQL 服务正常运行。
  • Casdoor 安装页面已自动生成数据库连接参数。
  • 安装完成后 Casdoor 容器能连接该数据库。
  • 已在受控位置记录自动生成的数据库名和账号,供备份、迁移及恢复使用。

不要把 Casdoor 容器里的 127.0.0.1 当作宿主机 MySQL 地址,也不要手工替换 1Panel 自动生成的服务名或 Docker 网络参数。

4.3 从 1Panel 应用商店安装

  1. 登录 1Panel。

  2. 打开“应用商店”。

  3. 搜索 Casdoor

  4. 点击“安装”。

  5. 保留并核对 1Panel 自动生成的数据库主机、端口、数据库名、用户名和密码。

  6. 记录 1Panel 实际生成的安装目录、Compose 文件位置、容器名、内部端口和映射端口。

  7. 完成安装,等待应用状态变为“已启动”。

不同版本和安装方式生成的目录可能不同。迁移、备份或修改 Compose 文件时,应以 1Panel“已安装应用 → Casdoor → 参数/详情”中显示的实际路径为准。

4.4 设置 Casdoor 外部访问 Origin

Casdoor 的 origin 应配置为:

https://cas.example.com

要求:

  • 使用 https://
  • 如使用非标准 HTTPS 端口,保留实际端口。
  • 末尾不加 /
  • 修改配置后通过 1Panel 重启 Casdoor。

4.5 在 1Panel 创建 HTTPS 反向代理站点

  1. 打开“网站”。
  2. 创建或编辑 cas.example.com 站点。
  3. 启用 HTTPS,并绑定有效证书。
  4. 监听对外 HTTPS 端口;如使用非标准端口,以实际配置为准。
  5. 反向代理到 1Panel 中 Casdoor 已安装应用所显示的内部地址和端口。
  6. 保留原始主机头,并正确传递 X-Forwarded-Proto: https
  7. 保存配置并重载 OpenResty/Nginx。

不要在手册中固定假设 Casdoor 的宿主机映射端口。Casdoor 容器通常监听 8000,但 1Panel 生成的实际映射可能不同,应以已安装应用详情为准。

4.6 首次登录与基础加固

Casdoor 官方镜像的常见初始管理员账号为:

用户名:admin
密码:123

首次登录后立即执行:

  • 修改管理员密码。
  • 确认管理账号的邮箱或恢复方式。
  • 保留一个只供故障恢复使用的本地管理员账号。
  • 记录当前 Casdoor 实际版本。
  • 备份 Casdoor 数据库和持久化配置。

5. 第二阶段:配置企业微信自建应用

5.1 创建自建应用

  1. 登录企业微信管理后台。
  2. 进入“应用管理”。
  3. 创建自建应用。
  4. 设置应用名称、Logo 和介绍。
  5. 将需要使用 JumpServer 的人员或部门加入应用可见范围。
  6. 记录以下三项:
    • 企业 ID(CorpID)
    • AgentId
    • 应用 Secret

Casdoor 中三个字段的对应关系如下:

Casdoor 字段企业微信字段
Client IDCorpID
Client secret自建应用 Secret
Agent IDAgentId

5.2 设置网页授权可信域名

在企业微信自建应用的“网页授权及 JS-SDK”设置中填写:

cas.example.com

此处填写域名;如果实际环境使用非标准端口,请按企业微信后台的字段要求处理:

  • 不填写 https://
  • 不填写任何路径。
  • 不添加末尾斜杠。
  • 如实际环境使用非标准端口,请按企业微信后台的字段要求填写并核对端口。

5.3 放置域名所有权验证文件

下文使用占位文件名演示;部署时必须使用企业微信实际下载的文件名和原始内容:

WW_verify_xxxxxxxxxxxxxxxx.txt

如果 Casdoor 站点是反向代理网站,而没有增加单独规则,请求会被转发给 Casdoor,企业微信将无法读取 TXT 原文件。因此需要在 1Panel/OpenResty 中为该文件增加精确匹配。

5.3.1 在 1Panel 中上传验证文件

  1. 登录 1Panel,进入“网站 → 网站列表”。

  2. 找到 cas.example.com 站点,点击“配置”。

  3. 在“网站目录”中查看该站点的实际根目录和站点代号。

  4. 在 1Panel“文件”页面进入该目录;若没有 index 目录,则在站点目录下新建 index

  5. 把下载的原始文件上传为:

    <站点目录>/index/WW_verify_xxxxxxxxxxxxxxxx.txt
    
  6. 不要修改文件名、大小写、扩展名或文件内容,也不要用编辑器重新保存并引入 BOM。

不同 1Panel 版本的宿主机目录可能不同,常见形式包括:

# 1Panel v2 常见宿主机路径示例
/opt/1panel/www/sites/<站点代号>/index/WW_verify_xxxxxxxxxxxxxxxx.txt

# 1Panel v1 常见宿主机路径示例
/opt/1panel/apps/openresty/openresty/www/sites/<站点代号>/index/WW_verify_xxxxxxxxxxxxxxxx.txt

不要仅凭示例猜路径,以当前 1Panel“网站目录”显示的实际值为准。

5.3.2 给反向代理站点增加精确匹配

  1. 回到“网站 → cas.example.com → 配置”。

  2. 打开完整的网站配置文件;不同版本中入口可能显示为“配置文件”或“基本 → 其他”。

  3. 找到该站点的 server { ... }

  4. 把下面的 location 块放在 server 内,且不要放进原有的 location / { ... } 内部:

    location = /WW_verify_xxxxxxxxxxxxxxxx.txt {
        root /www/sites/cas.example.com/index;
        default_type text/plain;
        try_files $uri =404;
    }
    

完整位置关系示例:

server {
    # 1Panel 原有的 listen、server_name、SSL 等配置保留不动

    location = /WW_verify_xxxxxxxxxxxxxxxx.txt {
        root /www/sites/cas.example.com/index;
        default_type text/plain;
        try_files $uri =404;
    }

    location / {
        # 1Panel 原有的 Casdoor proxy_pass 等配置保留不动
    }
}

注意:

  • 上述 /www/sites/cas.example.com/index 是 OpenResty 容器内的路径示例。
  • 如果 1Panel 中该网站的“站点代号”不是 cas.example.com,需要把路径中的 cas.example.com 替换成实际站点代号。
  • 可以在当前网站完整配置中查看 access_logerror_log 或已有 root 使用的 /www/sites/<站点代号>/... 路径,以此核对。
  • location = 是精确匹配,优先于原来的 location /,所以只有这个 TXT 请求直接读取静态文件,其他请求仍反向代理到 Casdoor。
  • 不要覆盖 1Panel 自动生成的整个配置文件,只增加上述精确匹配块。

5.3.3 保存、重载并验证

  1. 在 1Panel 中保存网站配置。

  2. 如果面板提示配置检查失败,先撤销刚才的配置并检查大括号位置,不要强制重启 OpenResty。

  3. 配置检查通过后,在 1Panel 中重载 OpenResty。

  4. 使用浏览器打开验证地址,或执行:

    curl -i 'https://cas.example.com/WW_verify_xxxxxxxxxxxxxxxx.txt'
    

预期结果:

  • HTTP 状态码为 200
  • Content-Typetext/plain,或至少不是 Casdoor 返回的 HTML 页面。
  • 响应正文与企业微信下载文件的原始内容逐字一致。
  • 没有跳转到 Casdoor 登录页,也没有 301/302 循环。

验证地址:

https://cas.example.com/WW_verify_xxxxxxxxxxxxxxxx.txt

检查要求:

  • 浏览器可以直接打开。
  • 没有跳转到 Casdoor。
  • 没有发生 301/302 循环。
  • 文件内容与企业微信下载的原始文件完全一致。

确认 URL 正常后,返回企业微信管理后台点击“确定”或“验证”。验证成功后即可继续。建议在使用该可信域名期间保留此文件和精确匹配规则,升级或迁移 1Panel/OpenResty 后重新验证一次。

5.4 配置企业可信 IP

把 Casdoor 服务器访问企业微信 API 时使用的公网出口 IP 加入企业微信可信 IP。

注意:

  • 通常应填公网出口/NAT IP,而不是 Casdoor 服务器的内网地址。
  • 如果服务器经防火墙、路由器或代理出网,以企业微信实际看到的源 IP 为准。
  • 出口 IP 变化会导致获取用户信息失败,应把它纳入变更管理。

6. 第三阶段:配置 Casdoor

6.1 创建组织

进入 Casdoor 管理后台:

Organization → Add

填写:

字段
Nameexample-org
Display name可填写企业中文名称

保存后,后续 Provider 和 Application 都选择此组织。

6.2 创建企业微信 Provider

进入:

Identity → Providers → Add

按下表配置:

字段
Nameprovider_wecom
Display name企业微信
Organizationexample-org
CategoryOAuth
TypeWeCom
Sub typeInternal
MethodNormal
Client ID企业微信 CorpID
Client secret企业微信自建应用 Secret
Agent ID企业微信自建应用 AgentId
Scopesnsapi_userinfo
Use ID as name开启
Email regex留空
Enable proxyCasdoor 可直连企业微信时关闭

保存 Provider。

当前采用 Normal 模式,适用于电脑浏览器显示企业微信扫码入口;该模式已经通过多用户验证。

6.3 邮箱授权范围说明

当前 Scope:

snsapi_userinfo

该范围没有向 Casdoor 返回真实邮箱,因此出现以下结果:

  • Casdoor 用户详情中的 Email 为空。
  • JumpServer 首次创建用户时生成 <企业微信用户 ID>@example.com 占位邮箱。

这是当前方案的已知表现,不是登录故障。

如果以后必须同步真实邮箱,需要同时确认:

  1. 企业微信自建应用已申请并获批相应敏感信息权限。
  2. Provider Scope 调整为企业微信允许的敏感信息范围,例如 snsapi_privateinfo
  3. 企业微信实际返回邮箱属性。
  4. Casdoor CAS 响应中确实包含 email
  5. JumpServer 中既有用户的占位邮箱如何更新,避免重复账号或唯一性冲突。

权限不足时不要直接切换 Scope,否则可能导致授权或用户信息获取失败。

6.4 创建 Casdoor 的 JumpServer 应用

进入:

Identity → Applications → Add

填写:

字段
Namejumpserver
Display name堡垒机
Organizationexample-org
TypeCAS
Redirect URLshttps://jumpserver.example.com/core/auth/cas/login/
Enable signup开启
Disable signin关闭

Redirect URL 必须完整填写,并保留末尾 /

https://jumpserver.example.com/core/auth/cas/login/

不要填写:

https://jumpserver.example.com/core/auth/cas/callback/

/core/auth/cas/callback/ 是 CAS Proxy Granting Ticket 相关回调,不是普通浏览器登录使用的 Service URL。

6.5 把企业微信 Provider 加入应用

jumpserver 应用的 Providers 页面添加:

provider_wecom

Provider 权限设置:

项目设置
Can signin开启
Can signup开启
Can unlink可选;本方案无需要可关闭

这里的 Can signup 和应用的 Enable signup 必须都允许,首次出现的企业微信用户才能由 Casdoor 即时创建。

不要打开 Disable signin。它会禁止整个应用的登录,不只影响密码登录,也会影响企业微信登录。

6.6 只显示企业微信登录入口

进入应用:

Applications → jumpserver → UI Customization

A. Signin methods

只保留一行 Password,Rule 选择:

Hide password

删除不需要的方法,例如:

  • Verification code
  • WebAuthn
  • Face ID
  • LDAP

B. Signin items

按下表设置 Visible:

登录元素Visible
Providers开启
Signin methods关闭
Username关闭
Password关闭
Verification code关闭
Forgot password?关闭
Login button关闭
Auto sign in关闭
Signup link关闭

保存后,用无痕窗口访问应用登录页。预期只显示:

Sign in with 企业微信

保存后应验证页面符合这一要求。

6.7 “隐藏密码登录”的安全边界

上述设置已经验证能隐藏用户名、密码和注册入口,但应区分“界面隐藏”和“服务端禁止”:

安全提示: 即使登录页面只显示企业微信,也不能仅凭页面效果断言密码登录 API 已在服务端被彻底禁用。生产上线前必须核对 Casdoor 版本并完成服务端验证。

  • Signin items 负责页面显示。
  • Hide password 在较新的 Casdoor 版本中同时用于拒绝该应用的密码登录请求。
  • Casdoor 在 v3.161.0 中加入了对该限制的服务端安全修复;更早版本可能只隐藏页面,但 API 仍可能接受密码登录。

上线前执行:

  • 在 1Panel 中确认 Casdoor 实际版本。
  • 确认版本不低于 v3.161.0,或升级到当前受支持的新版本。
  • 使用无痕窗口确认界面只有企业微信入口。
  • 如有安全测试条件,再验证应用的密码登录 API 已被服务端拒绝。

不要删除最后一个本地管理员或应急登录方式。普通用户的 jumpserver 应用可以只允许企业微信,但 Casdoor 管理后台仍应保留受严格保护的应急管理员账号。

应急管理员建议使用独立强密码、MFA 和来源 IP 限制,并定期验证确实可用。

6.8 可选:彻底阻止公开自助注册页面

为了让首次登录的企业微信用户自动创建,Enable signup 必须保持开启。隐藏 Signup link 只是前端设置,直接访问注册 URL 或调用注册 API 仍可能有效。

如果安全策略要求完全禁止公开的本地自助注册,可在 Casdoor 站点 的 1Panel/OpenResty 自定义反向代理配置中增加:

location ~ ^/(signup|auto-signup)(/|$) {
    return 404;
}

location = /api/signup {
    return 403;
}

说明:

  • 该规则用于阻止直接注册页面和本地注册 API。
  • 企业微信即时创建用户走 Casdoor 登录流程,不是 /api/signup
  • 这是可选加固项;只有实际加入并测试过该规则,才能视为已经启用。
  • 加入规则后必须重新测试企业微信首次登录、既有用户登录、管理员登录和注销。

7. 第四阶段:配置 JumpServer CAS

7.1 打开 CAS 设置

登录 JumpServer 管理后台,进入:

系统设置 → 认证设置 → CAS

7.2 填写配置

字段
CAS开启
Server URLhttps://cas.example.com/cas/example-org/jumpserver/
Callback addresshttps://jumpserver.example.com
Version3
Organization留空
Synchronized logout开启

Server URL 必须是 Casdoor CAS 应用的基础地址,并保留末尾 /

https://cas.example.com/cas/example-org/jumpserver/

不要手工在后面追加 login。JumpServer 会根据 CAS 流程拼接登录和校验路径。

Callback address 填 JumpServer 的外部访问基址:

https://jumpserver.example.com

这里:

  • 末尾不加 /
  • 不填写 /core/auth/cas/login/
  • 不填写 Casdoor 地址。

7.3 属性映射

填写:

{
  "cas:user": "username",
  "displayName": "name",
  "email": "email"
}

含义:

Casdoor 返回属性JumpServer 用户字段
cas:userusername
displayNamename
emailemail

在上述配置下,预期结果为:

  • cas:user 正常生成用户名。
  • displayName 正常生成中文姓名。
  • Casdoor 没有收到企业微信邮箱,所以 JumpServer 使用占位邮箱。

7.4 用户自动创建选项

不同 JumpServer 4.x 版本的界面可能不同:

  • 如果页面中有“创建用户”或类似选项,开启它。
  • 如果页面中没有该选项,不必另找;部分 JumpServer 4.x 版本会在首次 CAS 登录时自动创建用户,应通过首次登录测试确认。

“组织”字段可以留空,但应通过实际环境确认用户能够正常创建和登录。SSO 只解决身份认证,不会自动分配 JumpServer 的资产权限。

保存设置前,建议保留一个已经登录的 JumpServer 管理员窗口,以便错误时恢复配置。

8. 所有关键 URL 对照

用途URL末尾斜杠
Casdoor 对外 Originhttps://cas.example.com不要
Casdoor 首页https://cas.example.com/可有
企业微信域名验证文件https://cas.example.com/WW_verify_xxxxxxxxxxxxxxxx.txt不适用
系统自动使用的企业微信 OAuth 返回路径https://cas.example.com/callback非后台填写项
企业微信后台网页授权可信域名cas.example.com不含协议和路径
JumpServer 对外基址https://jumpserver.example.com不要
JumpServer CAS 登录/Service URLhttps://jumpserver.example.com/core/auth/cas/login/必须
JumpServer CAS 注销入口https://jumpserver.example.com/core/auth/cas/logout/必须
Casdoor CAS 基础地址https://cas.example.com/cas/example-org/jumpserver/必须
Casdoor CAS 登录地址https://cas.example.com/cas/example-org/jumpserver/login不要
Casdoor CAS 3.0 Ticket 校验https://cas.example.com/cas/example-org/jumpserver/p3/serviceValidate不要
Casdoor CAS 注销地址https://cas.example.com/cas/example-org/jumpserver/logout不要

最容易混淆的三个地址:

# 系统自动使用的企业微信 OAuth 返回路径(无需手工填写)
https://cas.example.com/callback

# Casdoor 应用 Redirect URL,也是 JumpServer 的 CAS Service URL
https://jumpserver.example.com/core/auth/cas/login/

# JumpServer 后台 CAS 页面里的 Callback address
https://jumpserver.example.com

9. 验收测试

9.1 测试前准备

  • 保留一个 JumpServer 本地管理员会话。
  • 使用无痕/隐私窗口,避免旧 Cookie 干扰。
  • 企业微信测试用户已在自建应用可见范围内。
  • Casdoor 和 JumpServer 的时间同步正常。
  • 内网和外网分别能正确解析域名。

9.2 新用户首次登录

  1. 打开:

    https://jumpserver.example.com/core/auth/cas/login/
    
  2. 确认浏览器跳转到 Casdoor。

  3. 确认页面只显示企业微信登录入口。

  4. 点击企业微信,扫码并点击同意。

  5. 确认跳回 JumpServer 并进入工作台。

  6. 在 JumpServer 管理后台确认自动创建了用户。

  7. 核对用户名、中文姓名和邮箱。

9.3 已有用户再次登录

  1. 从 JumpServer 注销。
  2. 关闭无痕窗口或清除相关站点 Cookie。
  3. 再次访问 CAS 登录入口。
  4. 完成企业微信授权。
  5. 确认进入原有账号,没有重复创建用户。

9.4 同步注销

  1. 登录 JumpServer。
  2. 点击注销。
  3. 确认返回 Casdoor 登录页。
  4. 直接访问 JumpServer 工作台。
  5. 确认不能绕过登录直接进入。
  6. 再次使用企业微信登录,确认功能正常。

9.5 验收结果记录示例

项目结果
测试用户范围已完成多用户测试
企业微信扫码与授权通过
Casdoor 用户创建/识别通过
JumpServer 自动创建用户通过
中文姓名正确
Casdoor 邮箱空白
JumpServer 邮箱<企业微信用户 ID>@example.com
注销后禁止直接回到工作台通过
注销后再次登录通过
登录页只显示企业微信通过

9.6 尚未验证或需要补录的项目

以下项目不应从当前成功结果中推断为已经完成:

  • 当前 Casdoor 实际安装版本及其服务端是否拒绝密码登录 API。
  • 可见范围外的企业微信成员是否被正确拒绝。
  • 直接注册页面和 /api/signup 是否已通过反向代理封锁;不要把界面隐藏误认为服务端已封锁。
  • snsapi_privateinfo 和真实邮箱同步;当前仍使用 snsapi_userinfo
  • 1Panel 实际安装目录、容器端口及 MySQL 主机、端口、数据库名。
  • JumpServer 组织、角色、用户组和资产权限分配。

以后升级 Casdoor/JumpServer、修改 Scope 或调整反向代理规则后,至少重新测试:全新用户首次 JIT、既有用户登录、可见范围外用户、CAS 3.0 属性、同步注销、无痕会话和应急管理员入口。

10. 用户授权说明

CAS 登录成功只代表“身份认证成功”。新用户进入 JumpServer 后,还需要管理员按实际职责配置:

  • 用户所属组织。
  • 用户组。
  • 系统角色。
  • 资产授权。
  • 账号授权。
  • 连接协议和操作权限。

不要因为用户能登录就默认其已经拥有任何资产访问权限。

11. 常见故障排查

11.1 企业微信提示可信域名校验失败

检查:

  • 后台填的是 cas.example.com,不是完整 URL。
  • 验证文件名没有改变。
  • 验证 URL 返回原始文本而不是 Casdoor 页面。
  • HTTPS 证书有效。
  • 公网端口映射可以访问。

11.2 点击企业微信后回调错误

检查:

  • Casdoor originhttps://cas.example.com
  • 企业微信“网页授权及 JS-SDK”的可信域名填写正确;如使用非标准端口,还需核对实际端口。
  • Casdoor Provider 的 CorpID、Secret、AgentId 对应正确。
  • 企业微信可信 IP 是实际公网出口 IP。
  • Casdoor 服务器能访问企业微信接口。

11.3 Casdoor 提示 Redirect URL 不匹配

确认 Casdoor 应用的 Redirect URLs 中精确存在:

https://jumpserver.example.com/core/auth/cas/login/

重点核对协议、端口、路径和末尾 /

11.4 JumpServer CAS 登录循环

检查:

  • JumpServer Server URL 末尾有 /
  • JumpServer Callback address 没有多余路径。
  • 反向代理正确传递 HTTPS 协议。
  • Casdoor 的系统时间与 JumpServer 一致。
  • 浏览器没有残留的错误 Cookie;使用无痕窗口复测。

11.5 登录成功但邮箱是 example.com

这是当前 snsapi_userinfo 配置下的预期行为。若业务必须使用真实邮箱,按“6.3 邮箱授权范围说明”重新评估企业微信权限和数据迁移,不要只修改 JumpServer 映射。

11.6 用户能登录但看不到资产

这是 JumpServer 授权问题,不是 CAS 故障。在 JumpServer 中为用户配置组织、用户组和资产授权。

11.7 隐藏了密码框但担心 API 仍可密码登录

检查 Casdoor 版本是否不低于 v3.161.0,并做服务端登录拒绝测试。页面不可见不等于服务端一定禁止。

12. 备份、升级与回滚

12.1 备份内容

每次升级前至少备份:

  • Casdoor MySQL 数据库。
  • 1Panel 中 Casdoor 应用的 Compose 文件和环境参数。
  • Casdoor 配置文件和持久化目录。
  • 1Panel/OpenResty 的 cas.example.com 站点配置。
  • 域名验证 TXT 文件。
  • 企业微信自建应用的 CorpID、AgentId、Secret、网页授权可信域名和企业可信 IP 配置记录。
  • JumpServer CAS 配置截图或导出记录。

12.2 升级原则

  1. 先核对 Casdoor 发布说明和数据库变更。
  2. 完成数据库与配置备份。
  3. 记录当前镜像版本,不使用不可追溯的临时标签回滚。
  4. 在维护窗口升级。
  5. 按第 9 节重新执行首次登录、再次登录、注销和权限隔离测试。

12.3 紧急回滚

若 CAS 登录失败:

  1. 使用预留的 JumpServer 本地管理员会话进入后台。
  2. 临时关闭 JumpServer CAS,恢复本地管理入口。
  3. 检查 Casdoor、企业微信和反向代理日志。
  4. 必要时恢复升级前的 Casdoor 数据库、配置和镜像版本。
  5. 修复后再开启 CAS,并重新完成端到端验证。

13. 配置记录模板

部署完成后补齐并存入受控密码库或内部运维系统:

Casdoor 服务器:<Casdoor 内网 IP>
Casdoor URL:https://cas.example.com/
JumpServer URL:https://jumpserver.example.com/

Casdoor 版本:________________
Casdoor 实际安装目录:________________
Casdoor 容器/服务名:________________
Casdoor 内部监听端口:________________

MySQL 主机:1Panel 自动生成(实际值:________________)
MySQL 端口:1Panel 自动生成(实际值:________________)
MySQL 数据库:1Panel 自动生成(实际值:________________)
MySQL 用户:1Panel 自动生成(实际值:________________)
MySQL 密码:1Panel 自动生成(存入密码库,不在普通文档重复记录)

企业微信 CorpID:________________
企业微信 AgentId:________________
企业微信 Secret:________________
企业微信网页授权可信域名:cas.example.com
企业微信可信公网出口 IP:________________

Casdoor Organization:example-org
Casdoor Application:jumpserver
Casdoor Provider:provider_wecom

14. 参考资料

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×