小企业信息化系统开发
小微企业内部系统统一登录实战:Authelia 单点登录、MFA 与反向代理访问控制
2026年10月19日
用 Authelia + Nginx 给 Wiki.js、Gitea、Nextcloud 等内部系统加单点登录与二次验证。
小微企业内部系统统一登录实战:Authelia 单点登录、MFA 与反向代理访问控制
摘要:企业跑了 Wiki.js、Appsmith、Gitea、Nextcloud、Metabase 一堆内部系统,账号散落、弱口令难管。本文用轻量的 Authelia 给所有内部系统加上单点登录(SSO)、二次验证(MFA)和按角色访问控制,部署成本极低。
为什么小企业也需要 SSO
很多小企业是"哪个工具好用就上哪个":知识库用 Wiki.js、低代码后台用 Appsmith、代码用 Gitea、网盘用 Nextcloud、图表用 Metabase。问题是每个系统各有一套账号体系,员工要记五六个密码,结果要么全设同一个弱口令,要么离职后某个系统忘了关账号。更麻烦的是没法统一强制 MFA,一旦某个系统暴露公网,就成了突破口。
单点登录(SSO)的思路是:所有内部系统前面挡一道认证网关,员工只需登录一次,访问任意系统都自动放行;未登录或被拦截的一律弹回登录页。小企业不需要上 Keycloak 那种重量级 IdP,Authelia 足够。
方案选型:Authelia 为什么适合小企业
- 轻量:Go 写的单二进制,Docker 起一个容器即可,内存占用几十 MB。
- 零外部依赖:自带用户文件(或接 LDAP/OpenID),不绑定云厂商。
- 反代集成成熟:通过 Nginx 的
auth_request子请求实现,和 Nginx Proxy Manager(NPM)、Caddy 都能配合。 - 对比 Keycloak:后者功能全但吃资源、概念多;对比每个系统逐个接 OAuth:Authelia 在反代层一刀切,接入成本最低。
部署架构:Authelia + Nginx Proxy Manager
典型拓扑:公网 → NPM(反代 + TLS)→ 内部各系统;Authelia 作为独立容器,NPM 通过 auth_request 把未授权请求转给它。
docker-compose 片段:
services:
authelia:
image: authelia/authelia:latest
volumes:
- ./authelia/config:/config
networks: [internal]
redis:
image: redis:7
networks: [internal]
Authelia 用 Redis 存会话,避免容器重启后全员掉线。NPM 里给每个内部系统开启"启用 WebSocket 支持"并配置高级 location 规则(见下文)。
配置会话与存储
configuration.yml 关键项:
session:
secret: "换成随机长字符串"
cookies:
- domain: example.com
authelipsis: false
redis:
host: redis
port: 6379
secret 必须随机且保密;domain 与你的内网域名一致,并开启 secure 标志(仅 HTTPS 下发 Cookie)。建议会话过期设 1 小时,兼顾安全与体验。
接入第一个受保护系统
在 NPM 的「高级」配置里,为目标主机加:
location / {
auth_request /authelia;
error_page 401 = @authelia-signin;
proxy_pass http://wiki-js:3000;
}
location /authelia {
internal;
proxy_pass http://authelia:9091/api/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
location @authelia-signin {
return 302 https://sso.example.com/?rd=$scheme://$host$request_uri;
}
Authelia 端用 access_control 规则按域名放行,例如内网段免登、其余需认证:
access_control:
rules:
- domain: wiki.example.com
policy: one_factor
- domain: admin.example.com
policy: two_factor
subject: ["group:admin"]
开启 MFA 二次验证
在 configuration.yml 启用:
totp:
issuer: MyCompany
webauthn:
rp:
id: example.com
display_name: MyCompany
员工首次登录后绑定 TOTP(Google Authenticator / 1Password),或用 WebAuthn 安全密钥/手机。可强制 policy: two_factor 对管理后台,普通系统用 one_factor 即可。务必生成并分发备份码,防止手机丢失锁死。
细粒度访问控制:按角色与网络放行
Authelia 的 rules 支持按域、子路径、网络段、用户组组合:
rules:
- domain: metabase.example.com
Networks: ["10.0.0.0/24"] # 内网直接放
policy: bypass
- domain: gitea.example.com
subject: ["group:dev"]
policy: two_factor
这样财务的 Metabase 在办公室免登、出外网要二次验证;Gitea 仅 dev 组可进。比在每个系统里单独配权限省心得多。
与已有系统对接的注意事项
- Gitea、Wiki.js、Nextcloud 原生支持 OIDC,可直接把 Authelia 配成 OIDC 提供方,实现"真正"的账号打通(不仅能进,还能带用户名/组)。
- 不支持 OIDC 的老系统(如某些自研后台),就靠反代层
auth_request兜底——至少保证"不登录进不去"。 - 公网暴露的系统务必全程 HTTPS,Authelia 的 Cookie 才安全。
安全加固与小结
最后补几道保险:所有入口强制 HTTPS(NPM 一键申请 Let's Encrypt);会话超时设短一点;连续失败触发锁定;定期看 Authelia 日志审计异常登录。这样一套下来,五六个内部系统的账号体系统一为"一次登录、按需 MFA、按角色放行",既降低了弱口令风险,也让员工少记密码、离职一键停用。