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. 架构与登录流程
这里包含两层协议:
- 企业微信到 Casdoor:使用 OAuth。
- Casdoor 到 JumpServer:使用 CAS 3.0。
3. 示例环境信息
| 项目 | 示例值 | 说明 |
|---|---|---|
| Casdoor 所在服务器 | <Casdoor 内网 IP> | 请替换为实际内网地址 |
| Casdoor 访问地址 | https://cas.example.com/ | 示例域名;部署时替换 |
| JumpServer 访问地址 | https://jumpserver.example.com/ | 示例域名;部署时替换 |
| Casdoor 组织名称 | example-org | 示例名称;部署时替换 |
| Casdoor 应用名称 | jumpserver | Casdoor 内部唯一名称 |
| Casdoor 应用显示名称 | 堡垒机 | 登录页显示名称 |
| 企业微信 Provider 名称 | provider_wecom | 示例名称;部署时替换 |
| 企业微信 Provider 显示名称 | 企业微信 | 登录页按钮文字 |
| Casdoor 应用类型 | CAS | 为 JumpServer 提供 CAS 服务 |
| JumpServer CAS 版本 | 3 | CAS 3.0 |
| 计划部署目录 | <Casdoor 实际安装目录> | 以 1Panel“已安装应用”页面显示为准 |
3.1 数据库信息
| 项目 | 值 |
|---|---|
| 数据库类型 | MySQL |
| 数据库位置 | <数据库服务器地址> 上已有的 MySQL |
| 数据库用户 | 1panel自动生成 |
| 数据库密码 | 1panel自动生成 |
| 数据库主机名/IP | 1panel自动生成 |
| 数据库端口 | 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 应用商店安装
-
登录 1Panel。
-
打开“应用商店”。
-
搜索
Casdoor。 -
点击“安装”。
-
保留并核对 1Panel 自动生成的数据库主机、端口、数据库名、用户名和密码。
-
记录 1Panel 实际生成的安装目录、Compose 文件位置、容器名、内部端口和映射端口。
-
完成安装,等待应用状态变为“已启动”。
不同版本和安装方式生成的目录可能不同。迁移、备份或修改 Compose 文件时,应以 1Panel“已安装应用 → Casdoor → 参数/详情”中显示的实际路径为准。
4.4 设置 Casdoor 外部访问 Origin
Casdoor 的 origin 应配置为:
https://cas.example.com
要求:
- 使用
https://。 - 如使用非标准 HTTPS 端口,保留实际端口。
- 末尾不加
/。 - 修改配置后通过 1Panel 重启 Casdoor。
4.5 在 1Panel 创建 HTTPS 反向代理站点
- 打开“网站”。
- 创建或编辑
cas.example.com站点。 - 启用 HTTPS,并绑定有效证书。
- 监听对外 HTTPS 端口;如使用非标准端口,以实际配置为准。
- 反向代理到 1Panel 中 Casdoor 已安装应用所显示的内部地址和端口。
- 保留原始主机头,并正确传递
X-Forwarded-Proto: https。 - 保存配置并重载 OpenResty/Nginx。
不要在手册中固定假设 Casdoor 的宿主机映射端口。Casdoor 容器通常监听 8000,但 1Panel 生成的实际映射可能不同,应以已安装应用详情为准。
4.6 首次登录与基础加固
Casdoor 官方镜像的常见初始管理员账号为:
用户名:admin
密码:123
首次登录后立即执行:
- 修改管理员密码。
- 确认管理账号的邮箱或恢复方式。
- 保留一个只供故障恢复使用的本地管理员账号。
- 记录当前 Casdoor 实际版本。
- 备份 Casdoor 数据库和持久化配置。
5. 第二阶段:配置企业微信自建应用
5.1 创建自建应用
- 登录企业微信管理后台。
- 进入“应用管理”。
- 创建自建应用。
- 设置应用名称、Logo 和介绍。
- 将需要使用 JumpServer 的人员或部门加入应用可见范围。
- 记录以下三项:
- 企业 ID(CorpID)
- AgentId
- 应用 Secret
Casdoor 中三个字段的对应关系如下:
| Casdoor 字段 | 企业微信字段 |
|---|---|
| Client ID | CorpID |
| Client secret | 自建应用 Secret |
| Agent ID | AgentId |
5.2 设置网页授权可信域名
在企业微信自建应用的“网页授权及 JS-SDK”设置中填写:
cas.example.com
此处填写域名;如果实际环境使用非标准端口,请按企业微信后台的字段要求处理:
- 不填写
https://。 - 不填写任何路径。
- 不添加末尾斜杠。
- 如实际环境使用非标准端口,请按企业微信后台的字段要求填写并核对端口。
5.3 放置域名所有权验证文件
下文使用占位文件名演示;部署时必须使用企业微信实际下载的文件名和原始内容:
WW_verify_xxxxxxxxxxxxxxxx.txt
如果 Casdoor 站点是反向代理网站,而没有增加单独规则,请求会被转发给 Casdoor,企业微信将无法读取 TXT 原文件。因此需要在 1Panel/OpenResty 中为该文件增加精确匹配。
5.3.1 在 1Panel 中上传验证文件
-
登录 1Panel,进入“网站 → 网站列表”。
-
找到
cas.example.com站点,点击“配置”。 -
在“网站目录”中查看该站点的实际根目录和站点代号。
-
在 1Panel“文件”页面进入该目录;若没有
index目录,则在站点目录下新建index。 -
把下载的原始文件上传为:
<站点目录>/index/WW_verify_xxxxxxxxxxxxxxxx.txt -
不要修改文件名、大小写、扩展名或文件内容,也不要用编辑器重新保存并引入 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 给反向代理站点增加精确匹配
-
回到“网站 →
cas.example.com→ 配置”。 -
打开完整的网站配置文件;不同版本中入口可能显示为“配置文件”或“基本 → 其他”。
-
找到该站点的
server { ... }。 -
把下面的
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_log、error_log或已有root使用的/www/sites/<站点代号>/...路径,以此核对。 location =是精确匹配,优先于原来的location /,所以只有这个 TXT 请求直接读取静态文件,其他请求仍反向代理到 Casdoor。- 不要覆盖 1Panel 自动生成的整个配置文件,只增加上述精确匹配块。
5.3.3 保存、重载并验证
-
在 1Panel 中保存网站配置。
-
如果面板提示配置检查失败,先撤销刚才的配置并检查大括号位置,不要强制重启 OpenResty。
-
配置检查通过后,在 1Panel 中重载 OpenResty。
-
使用浏览器打开验证地址,或执行:
curl -i 'https://cas.example.com/WW_verify_xxxxxxxxxxxxxxxx.txt'
预期结果:
- HTTP 状态码为
200。 Content-Type为text/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
填写:
| 字段 | 值 |
|---|---|
| Name | example-org |
| Display name | 可填写企业中文名称 |
保存后,后续 Provider 和 Application 都选择此组织。
6.2 创建企业微信 Provider
进入:
Identity → Providers → Add
按下表配置:
| 字段 | 值 |
|---|---|
| Name | provider_wecom |
| Display name | 企业微信 |
| Organization | example-org |
| Category | OAuth |
| Type | WeCom |
| Sub type | Internal |
| Method | Normal |
| Client ID | 企业微信 CorpID |
| Client secret | 企业微信自建应用 Secret |
| Agent ID | 企业微信自建应用 AgentId |
| Scope | snsapi_userinfo |
| Use ID as name | 开启 |
| Email regex | 留空 |
| Enable proxy | Casdoor 可直连企业微信时关闭 |
保存 Provider。
当前采用 Normal 模式,适用于电脑浏览器显示企业微信扫码入口;该模式已经通过多用户验证。
6.3 邮箱授权范围说明
当前 Scope:
snsapi_userinfo
该范围没有向 Casdoor 返回真实邮箱,因此出现以下结果:
- Casdoor 用户详情中的 Email 为空。
- JumpServer 首次创建用户时生成
<企业微信用户 ID>@example.com占位邮箱。
这是当前方案的已知表现,不是登录故障。
如果以后必须同步真实邮箱,需要同时确认:
- 企业微信自建应用已申请并获批相应敏感信息权限。
- Provider Scope 调整为企业微信允许的敏感信息范围,例如
snsapi_privateinfo。 - 企业微信实际返回邮箱属性。
- Casdoor CAS 响应中确实包含
email。 - JumpServer 中既有用户的占位邮箱如何更新,避免重复账号或唯一性冲突。
权限不足时不要直接切换 Scope,否则可能导致授权或用户信息获取失败。
6.4 创建 Casdoor 的 JumpServer 应用
进入:
Identity → Applications → Add
填写:
| 字段 | 值 |
|---|---|
| Name | jumpserver |
| Display name | 堡垒机 |
| Organization | example-org |
| Type | CAS |
| Redirect URLs | https://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 URL | https://cas.example.com/cas/example-org/jumpserver/ |
| Callback address | https://jumpserver.example.com |
| Version | 3 |
| 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:user | username |
displayName | name |
email | email |
在上述配置下,预期结果为:
cas:user正常生成用户名。displayName正常生成中文姓名。- Casdoor 没有收到企业微信邮箱,所以 JumpServer 使用占位邮箱。
7.4 用户自动创建选项
不同 JumpServer 4.x 版本的界面可能不同:
- 如果页面中有“创建用户”或类似选项,开启它。
- 如果页面中没有该选项,不必另找;部分 JumpServer 4.x 版本会在首次 CAS 登录时自动创建用户,应通过首次登录测试确认。
“组织”字段可以留空,但应通过实际环境确认用户能够正常创建和登录。SSO 只解决身份认证,不会自动分配 JumpServer 的资产权限。
保存设置前,建议保留一个已经登录的 JumpServer 管理员窗口,以便错误时恢复配置。
8. 所有关键 URL 对照
| 用途 | URL | 末尾斜杠 |
|---|---|---|
| Casdoor 对外 Origin | https://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 URL | https://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 新用户首次登录
-
打开:
https://jumpserver.example.com/core/auth/cas/login/ -
确认浏览器跳转到 Casdoor。
-
确认页面只显示企业微信登录入口。
-
点击企业微信,扫码并点击同意。
-
确认跳回 JumpServer 并进入工作台。
-
在 JumpServer 管理后台确认自动创建了用户。
-
核对用户名、中文姓名和邮箱。
9.3 已有用户再次登录
- 从 JumpServer 注销。
- 关闭无痕窗口或清除相关站点 Cookie。
- 再次访问 CAS 登录入口。
- 完成企业微信授权。
- 确认进入原有账号,没有重复创建用户。
9.4 同步注销
- 登录 JumpServer。
- 点击注销。
- 确认返回 Casdoor 登录页。
- 直接访问 JumpServer 工作台。
- 确认不能绕过登录直接进入。
- 再次使用企业微信登录,确认功能正常。
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
origin是https://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 升级原则
- 先核对 Casdoor 发布说明和数据库变更。
- 完成数据库与配置备份。
- 记录当前镜像版本,不使用不可追溯的临时标签回滚。
- 在维护窗口升级。
- 按第 9 节重新执行首次登录、再次登录、注销和权限隔离测试。
12.3 紧急回滚
若 CAS 登录失败:
- 使用预留的 JumpServer 本地管理员会话进入后台。
- 临时关闭 JumpServer CAS,恢复本地管理入口。
- 检查 Casdoor、企业微信和反向代理日志。
- 必要时恢复升级前的 Casdoor 数据库、配置和镜像版本。
- 修复后再开启 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. 参考资料
- 1Panel Casdoor 应用
- 1Panel 网站配置使用说明
- Casdoor 服务端安装
- Casdoor 作为 CAS Server
- Casdoor 企业微信 Provider
- Casdoor Application 字段说明
- Casdoor Sign-in items
- JumpServer CAS 认证配置
- 企业微信网页授权登录
- Casdoor v3.161.0 安全修复发布说明
- JumpServer v4.0.2 CAS Service URL 构造源码
- django-cas-ng Proxy Granting Ticket callback 源码
- Casdoor CAS 3.0 属性返回源码
- Casdoor 企业微信即时创建用户逻辑
- Casdoor Hide password 服务端修复提交