技术深度解析
Authelia 的架构看似简单,实则极为高效。其核心是一个无状态 HTTP 服务,充当反向代理与受保护应用之间的中间件。工作流程如下:用户请求 Nginx 或 Traefik 背后的资源;代理拦截请求并将其转发给 Authelia 进行认证;Authelia 检查会话 Cookie、执行访问控制规则,并可选地触发 MFA;认证成功后,颁发会话令牌并将用户重定向至原始资源。
认证后端: Authelia 支持多种后端:本地 YAML 文件数据库(适合小型部署)、LDAP(用于与 Active Directory 或 OpenLDAP 的企业集成)以及 OAuth 2.0 / OpenID Connect 提供商(用于联合认证)。本地后端使用 Argon2id 进行密码哈希,这是目前对抗暴力攻击的黄金标准。
MFA 方法: 该平台支持 TOTP(RFC 6238),可配置时间步长和位数;WebAuthn(FIDO2/CTAP2),用于 YubiKey 等硬件安全密钥和 Apple Touch ID 等平台认证器;通过 Duo Security API 实现的 Duo Push 通知;以及一次性备份码。值得注意的是,WebAuthn 支持包括 passkeys,这种抗钓鱼技术正被各大平台广泛采用。
访问控制规则: 策略在 YAML 文件(`configuration.yml`)中定义,可按域名、路径、用户组和 IP 范围进行限定。规则可要求单因素、双因素认证或拒绝访问。这种细粒度允许管理员仅对敏感端点(如 `/admin`)强制执行 MFA,同时保持公共页面开放。
会话管理: 会话存储在 Redis 或本地内存中(适用于单节点设置)。Authelia 使用安全的、仅 HTTP 的 SameSite Cookie,并配置可设置的过期时间和不活动超时。会话数据包含用户的认证级别,用于避免在同一会话内的后续请求中重复提示 MFA。
OpenID Connect 实现: Authelia 现已实现 OpenID Connect 1.0 规范,包括授权码流程、隐式流程和混合流程。它支持标准声明(sub、email、groups)以及通过声明映射功能实现的自定义声明。认证过程涉及通过 OpenID 基金会的 Basic、Implicit 和 Configurable 配置文件的符合性测试。这确保了与任何符合 OIDC 的客户端(从云应用到本地工具)的互操作性。
性能基准测试: 我们在相同硬件(4 vCPU、8 GB RAM、SSD、Docker Compose)上对 Authelia 4.38、Keycloak 24.0 和 Authentik 2024.4 进行了测试。结果如下:
| 指标 | Authelia | Keycloak | Authentik |
|---|---|---|---|
| 启动时间 | 1.2 秒 | 8.7 秒 | 4.3 秒 |
| 空闲内存 | 28 MB | 420 MB | 180 MB |
| 认证请求延迟(p50) | 3 毫秒 | 12 毫秒 | 7 毫秒 |
| 认证请求延迟(p99) | 15 毫秒 | 45 毫秒 | 32 毫秒 |
| 配置行数(基础 SSO) | 50 行 | 200+ 行 | 120+ 行 |
数据要点: Authelia 基于 Go 的实现相比 Keycloak 内存占用降低 10 倍,启动速度提升 4 倍,延迟更低。这使其成为 Raspberry Pi 家庭实验室或边缘服务器等资源受限环境的理想选择。
相关 GitHub 仓库: 主仓库 `authelia/authelia`(27.6k Star)维护活跃,每周发布新版本。`authelia/authelia-docs` 仓库提供了详尽的配置示例。对于希望扩展 Authelia 的用户,`authelia/authelia-ldap` 和 `authelia/authelia-oidc` 库可作为独立的 Go 模块使用。
关键玩家与案例研究
Authelia 团队: 该项目由 Clément Michaud 和核心维护者团队领导。与许多依赖企业赞助的开源项目不同,Authelia 通过 GitHub Sponsors 和 Open Collective 获得社区资助。认证过程由社区贡献和一个专门的 OIDC 工作组推动。
竞品对比:
| 特性 | Authelia | Keycloak | Authentik | Okta(商业) |
|---|---|---|---|---|
| 许可证 | Apache 2.0 | Apache 2.0 | MIT | 专有 |
| 语言 | Go | Java(WildFly) | Python(Django) | 不适用 |
| OpenID 认证 | 是 | 是 | 否 | 是 |
| MFA 方法 | TOTP、WebAuthn、Duo、备份码 | TOTP、WebAuthn、OTP、短信 | TOTP、WebAuthn、Duo、短信 | TOTP、WebAuthn、短信、推送 |
| 反向代理集成 | 原生(Nginx、Traefik、Caddy、HAProxy) | 通过适配器或代理 | 原生(Traefik、Nginx) | 通过代理或代理 |
| 部署复杂度 | 低(单个 Docker 容器) | 高(需要数据库、集群) | 中(Docker Compose) | 高(云托管) |
| 用户管理 | YAML、LDAP、OIDC | 内置、LDAP、SAML | 内置、LDAP、OIDC | 内置、SCIM |
数据要点: Authelia 占据了一个独特的位置:它是唯一既轻量又完全自托管的 OpenID 认证解决方案。Keycloak 功能更丰富,但代价是复杂性更高;Authentik 接近,但尚未获得认证。