孙亮亮
返回 小企业信息化系统开发

小企业信息化系统开发

小微企业内部系统统一登录实战:Authelia 单点登录、MFA 与反向代理访问控制

2026年10月19日

用 Authelia + Nginx 给 Wiki.js、Gitea、Nextcloud 等内部系统加单点登录与二次验证。

单点登录Authelia统一认证MFA

小微企业内部系统统一登录实战: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、按角色放行",既降低了弱口令风险,也让员工少记密码、离职一键停用。

本模块其他文章

小微企业用 Paperless-ngx 搭建智能文档归档系统:发票合同 OCR 识别、标签检索与权限管理小微企业用 PostgREST 把 PostgreSQL 直接变成 REST API:只读接口、行级权限与内部数据对接小微企业用 Uptime Kuma 自建服务监控与宕机告警:网站、接口、SSL 证书与心跳检测小微企业用 Gitea 自建内网代码与文档版本管理:Git 服务、Issues 跟踪与 Webhook 自动部署小微企业用 FreeScout 自建客服工单系统:邮件转工单、SLA 与协作回复实战小微企业用 Odoo 搭建一体化 ERP:进销存、CRM 与财务模块落地实战小微企业用 Nextcloud 自建企业网盘:文件同步、权限分级与异地容灾小微企业用 Metabase 做业务数据分析:连接数据库、可视化图表与定时报表小微企业内部知识库搭建实战:用 Wiki.js 实现文档协作、权限分级与全文检索小微企业用 Appsmith 搭建零代码内部管理后台:数据看板、工单与权限小微企业用 n8n 搭建业务自动化工作流:表单收集到消息通知实战小微企业用 Docker + NocoDB 搭建轻量业务数据库:零代码管理客户与订单小企业进销存轻量化落地:用 SQL + 轻量 Web 替代 Excel 的实操路径小企业业务系统数据备份实战:从每日自动备份到异地容灾小企业自建系统的权限设计实战:从“谁都能改”到 RBAC 与数据范围隔离小企业库存管理怎么起步:从 Excel 到轻量进销存的平滑迁移从 Excel 进销存到一套能演进的系统小企业 CRM:买现成还是自己搭?
小微企业内部系统统一登录实战:Authelia 单点登录、MFA 与反向代理访问控制 · 孙亮亮