前言
企业级、可审计、私有化的知识库系统,使用 Casdoor 作为对外的身份认证与企业微信(钉钉/企业微信)其他支持登录入口,Casdoor 部署在公网并通过安全策略暴露 OIDC;Outline 部署于局域网(仅内网可访问,保证知识库绝对安全),使用 Casdoor 的 OIDC 完成认证,从而实现对 Outline 的强身份验证与统一身份管理及方便登录。
设计原则
最小暴露面:只将 Casdoor(认证入口)暴露到公网,Outline 不直接暴露公网,只能由内网或经受控跳板访问。
统一 SSO:所有用户通过企业微信登录 Casdoor,由 Casdoor 发放 OIDC token/ID token 给 Outline。
TLS 全程加密:公网 <-> Casdoor HTTPS/TLS。
最小权限与审计:Casdoor 配置企业级角色映射,开启登录/审计日志;Outline 使用团队/组权限控制内容访问。
网络示意图
Internet
|
DNS(auth.example.com)
|
+---------------------------+
| 公网 LB / WAF (可选) |
+---------------------------+
|
+-------------------+
| 反向代理 (Nginx) |
| TLS Termination |
+-------------------+
|
+-------------------+
| Casdoor | <- 公网可访问 (OIDC endpoints)
| (auth.example.com)|
+-------------------+
|
---------------------------------------------------------------
| 企业内部网络 / VPN / 专线 (仅内部可达) |
| |
| +-------------------+ +---------------------------+ |
| | Internal Users |<----->| Reverse Proxy (optional)| |
| +-------------------+ +---------------------------+ |
| | | |
| | | |
| +-------------------+ +-------------------+ |
| | Outline |<----| Bastion / Admin | |
| | (KB server, 10.0.0.10)| | (管理/运维入口) | |
| +-------------------+ +-------------------+ |
| ^ ^ |
| | | |
| (HTTPS to) (SSH/管理) |
---------------------------------------------------------------
Notes:
- Outline 需要从内部发起到 Casdoor 的 HTTP 请求以完成 OIDC 登录流程。
- Casdoor 可限制允许的回调 URL(只允许 Outline 的内部回调地址)。
- 若 Outline 的用户来自外部,需要 VPN 或端口代理(不要把 Outline 直接暴露到公网)。
假设与前提
企业已有域名(例如
auth.example.com
指向 Casdoor);内部 LAN 域或直连 IP 用于 Outline(如outline.lan
或10.0.0.10
)。能够配合企业微信(WeCom)配置第三方应用/企业号,并可获得
CorpID
、Secret
等凭证供 Casdoor 使用。有能力配置防火墙 / NAT / 反向代理(如 Nginx、Traefik)和 TLS 证书(Let's Encrypt / 企业 CA)。
安装教程
安装docker
docker安装教程:https://halo.blog360.sbs/archives/dockeran-zhuang-jiao-cheng
下载安装目录
outline 完整目录如下
.
├── casdoor-conf
│ └── app.conf # casdoor配置文件宿主机挂载映射目录
├── data # outline 静态文件存储宿主机挂载目录
│ └── uploads
├── docker-compose.yml # 完整docker启动yml 占用宿主机端口8000 和3000 可自定义
├── docker-compose.yml.bak # 完整docker启动yml备份
├── init-databases.sh # casdoor连接数据库初始
├── .env #outline 配置文件信息
└── postgres-data # postgres 宿主机数据卷挂载
├── base
修改配置文件“vim .env”
# Outline 访问地址
URL=http://192.168.73.129:3000
FORCE_HTTPS=false
# 数据库(Postgres 推荐,如必须 MySQL -> 需兼容层)
#DATABASE_URL=mysql://user:password@192.168.1.10:3306/outline
DATABASE_URL=postgres://outline:password@postgres:5432/outline
PGSSLMODE=disable
# Redis
REDIS_URL=redis://redis:6379/0
# 外部 Redis 用户名 + 密码(Redis 6 ACL 模式)
#REDIS_URL=redis://:myStrongRedisPass@192.168.1.11:6379/0
# 文件存储(本地)
FILE_STORAGE=local
FILE_STORAGE_PATH=/var/lib/outline/data
#smtp
#SMTP_DISABLED=true
SMTP_HOST=smtp.qq.com # 配置 SMTP 发送注册/找回密码邮件
SMTP_PORT=465
SMTP_USERNAME=admin@qq.com
SMTP_PASSWORD=password
SMTP_FROM_EMAIL=admin@qq.com # 发件人邮箱
NODE_TLS_REJECT_UNAUTHORIZED=0
# 启用 OIDC
# Outline 本身的配置(省略你已有的)
OIDC_CLIENT_ID=8db86819d0068fdd4648
OIDC_CLIENT_SECRET=5b37bd8c6b1965588fba2a2b7cc77f4902a0dd78
# OIDC / Casdoor 配置
OIDC_AUTH_URI=http://192.168.73.129:8000/login/oauth/authorize
OIDC_TOKEN_URI=http://192.168.73.129:8000/api/login/oauth/access_token
OIDC_USERINFO_URI=http://192.168.73.129:8000/api/get-account
OIDC_ISSUER=http://192.168.73.129:8000
# Outline 登录按钮显示的文字
OIDC_DISPLAY_NAME=Casdoor sso
# OIDC 返回的用户字段
OIDC_USERNAME_CLAIM=name
OIDC_SCOPES=openid profile email
# 安全配置
SECRET_KEY=3a2b947687eb6d251b2a57b73ff0c54c0b6b7d22d157334111fe516d93d17b3e
UTILS_SECRET=3a2b947687eb6d251b2a57b73ff0c54c0b6b7d22d157334111fe516d93d17b3e
启动容器
docker compose up -d
发布教程
发布Casdoor
添加配置域名发布文件
server {
listen 80;
server_name test.blog360.sbs;
client_max_body_size 20m;
# 主请求代理
location / {
proxy_pass http://172.30.0.2:80;
# 关键头信息传递 (解决混合内容问题)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 告知Discourse使用HTTPS
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 缓存优化
proxy_cache_bypass $http_upgrade;
# 修复静态资源路径
sub_filter_once off;
sub_filter_types text/html text/css application/javascript;
}
}
申请免费证书(ssl证书可选)
安装Certbot工具
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
申请ssl证书(nginx)
sudo certbot --nginx -d your-domain.com
替换
your-domain.com
为你的域名
使用教程
1.outline 配置集成smtp
这里的设置非常简单,在.env文件中已经配置完成了,如下:
SMTP_HOST=smtp.qq.com # 配置 SMTP 发送注册/找回密码邮件
SMTP_PORT=465
SMTP_USERNAME=admin@qq.com
SMTP_PASSWORD=password
SMTP_FROM_EMAIL=admin@qq.com # 发件人邮箱
NODE_TLS_REJECT_UNAUTHORIZED=0
2.outline 集成 Casdoor OIDC标准认证
这里分为两步,
前往Casdoor 创建好应用,获取到OIDC_CLIENT_ID和OIDC_CLIENT_SECRET还可以顺手改给log
修改.env文件修改key和SECRET
OIDC_CLIENT_ID=8db86819d0068fdd4648 # 修改为自己的配置 OIDC_CLIENT_SECRET=5b37bd8c6b1965588fba2a2b7cc77f4902a0dd78 # 修改为自己的配置 #修改正确域名或者IP # OIDC / Casdoor 配置 注意 Outline 》= V0.87.3 OIDC_AUTH_URI=http://192.168.73.129:8000/login/oauth/authorize OIDC_TOKEN_URI=http://192.168.73.129:8000/api/login/oauth/access_token OIDC_USERINFO_URI=http://192.168.73.129:8000/api/get-account OIDC_ISSUER=http://192.168.73.129:8000
完成后打开页面,点击Casdoor sso跳转Casdoor 页面登录,注意配置Casdoor 用户邮箱参数
3.Casdoor 集成企业微信(包括其他像钉钉,qq...)认证
添加供应商,以企业微信为例子
创建供应商,配置对应参数
配置企业微信id,应用编号,企业密钥
为应用选择供应商
为应用选取企业微信(注意权限)
测试企业微信登录注册是否生效(注意企业微信不返回邮箱,需要手动或者给应用授权)
outline 知识库架构
outline 是以文档集 --》 文档 --》文档 创建根节点文档集 下可以创建任意文档,而文档下还可以不断创建文档
4.outline 权限及用户使用教程
用户群组,创建一个用户集合,方便用于范围授权
用户,权限用户最小单位,用于精细级别授权