注意:本文的实操内容可能会导致账号访问权限丢失,请谨慎操作!
最近,我正在尝试使用 Casdoor,让 WordPress 支持 SSO 登录。
事情的起因是这样的:
网站的服务越来越多了,但是登录不同的服务需要单独的不同账号,这样显得非常麻烦,所以为了终结需要多个账号的问题,计划三步走:
- 在本地尝试使用 Casdoor 接入 WordPress 作为可行性验证;
- 搭建一个 Casdoor 服务(https://sso.akarinliu.com),在每个网站的登录页面新增 “阿卡林刘 SSO” 登录选项,引导用户迁移至 SSO。
- 等到全部迁移实现或达到迁移目标的 99%,将强制跳转至 SSO 登录。
1. 安装 Docker
前往 https://docker.com 安装 Docker。
2. 安装 1Panel(可选)
前往 https://1panel.cn 获取安装命令执行安装。
3. 搭建虚拟环境
复制以下 Docker Compose 文件和 Casdoor 的配置文件:
# dir: ./compose.yml
services:
mariadb:
image: mariadb:lts
volumes:
- ./data/mariadb:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=mysql
healthcheck:
test:
[
"CMD",
"healthcheck.sh",
"--su-mysql",
"--connect",
"--innodb_initialized",
]
start_period: 1m
start_interval: 10s
interval: 1m
timeout: 5s
retries: 3
phpmyadmin:
image: phpmyadmin
environment:
- PMA_HOST=mariadb
ports:
- 3307:80
depends_on:
mariadb:
condition: service_healthy
casdoor:
image: casbin/casdoor
ports:
- 8000:8000
volumes:
- ./data/casdoor:/data
- ./conf/casdoor:/conf
environment:
- RUNNING_IN_DOCKER=true
depends_on:
mariadb:
condition: service_healthy
wordpress:
image: wordpress
volumes:
- ./data/wordpress:/var/www/html
ports:
- 8080:80
depends_on:
mariadb:
condition: service_healthy
# dir: ./conf/casdoor/app.conf
appname = casdoor
httpport = 8000
runmode = dev
SessionOn = true
copyrequestbody = true
driverName = mysql
dataSourceName = root:mysql@tcp(mariadb:3306)/
dbName = casdoor
tableNamePrefix =
showSql = false
redisEndpoint =
defaultStorageProvider =
isCloudIntranet = false
authState = "casdoor"
socks5Proxy = "127.0.0.1:10808"
verificationCodeTimeout = 30
initScore = 2000
logPostOnly = true
origin = "http://localhost:8000"
staticBaseUrl = "https://cdn.casbin.org"
enableGzip = true
inactiveTimeoutMinutes =
保存好文件后,执行以下命令启动编排:
docker compose up -d
访问 http://localhost:8000 输入账号密码: admin 123
4. 让 WordPress 接入 Casdoor
这一点整个过程非常棘手,我一开始使用的 MiniOrange 的 OAuth2 插件,配置好后结果无法正常登录,OpenID 的插件一年没有维护了也不可用。最终使用了 Authorizer 这个插件,目前来看非常可靠,不会出问题。
我觉得这个最容易掉坑里的是良莠不齐的插件生态,所以如果你有更好的插件,可以在评论区留言。
好吧,扯远了,回到话题。
- 访问 Casdoor 的后台,新建一个组织,不要使用内置的组织;
- 切换至新建的组织,创建一个应用,填好信息保存;
- 在 WordPress 的插件市场搜索 Authorizer,点击安装;
- 在 WordPress 插件管理器 启用它;
- 点击 设置 ➡️ Authorizer,打开它的管理页面;
- 在外部服务 Tab 勾选 “启用 OAuth2 服务” 复选框;
- 请按照下图填写,Client ID 和 Client Secret 填写你在 Casdoor 得到的,另外 localhost:8000 和 casdoor:8000 替换成你部署 SSO 服务的域名,http 替换成 https,最后点击保存。
5. 测试部署结果
辛苦啦,来测试一下结果如何吧!
在 Casdoor 新组织创建一个与您在 WordPress 用户名和邮箱一致的账号。
新建一个隐私标签页,访问网站的管理后台,例如:https://www.akarinliu.com/wp-admin。
这时候会自动跳转至 Casdoor 登录页面,如果没有的话,点击带有 SSO 登录的按钮。
输入您的账号密码,按下回车键登录。
如果进入到了后台,恭喜你,WordPress 使用 Casdoor 登录成功!
总结
Casdoor 可以解决您的网站的账号体系混乱问题,虽然配置很麻烦,但是一旦配置好了,体验会得到提升,以后不需要多个同域名不同网站的账号了。