
当你管理超过三个需要登录的内部服务时,统一身份认证就有了硬性需求。每个应用各搞一套用户数据库,密码策略不一致,MFA 支持参差不齐,离职员工账号散落在十几个系统里没法统一清理。authentik 就是为解决这个问题而生的开源身份提供商(Identity Provider,IdP),在 GitHub 上积累了超过 24,000 颗 Star,近期日增接近 500 颗。
authentik 是什么
authentik 是一个用 Python/Django 构建的开源身份提供商和单点登录(SSO)平台。它把多个应用的认证流程收拢到一个中心化服务中,用户只需在一个地方登录,就能访问所有接入的应用。
它的核心定位是 Okta、Azure Entra ID、Auth0 这类商业 IdP 的自托管替代方案。许可证方面,社区版采用 MIT 协议,企业版额外提供 SLA 支持、企业级 SSO 源、FIPS 合规等功能。
协议支持矩阵
authentik 的协议覆盖面是其主要竞争力之一:
| 协议 | 用途 | 典型场景 |
|---|---|---|
| OAuth2 / OIDC | 现代 Web 和移动应用认证 | SaaS 应用、API 网关、自研系统 |
| SAML 2.0 | 企业级联合认证 | Salesforce、Workday 等 SaaS |
| LDAP | 目录服务集成 | 传统应用、邮件服务器 |
| RADIUS | 网络设备认证 | Wi-Fi 认证、交换机 802.1X |
| SCIM | 自动用户配置 | 跨系统用户同步 |
| WS-Federation | Windows 应用联合认证 | ADFS 集成 |
| SSF | 共享信号框架 | 实时安全事件通知 |
authentik 的 OIDC 实现通过了 OpenID 认证(OpenID Certified),这意味着它通过了 OpenID 基金会的合规性测试套件,不是自说自话的"兼容"。
核心架构:单体加 Outpost
authentik 的架构设计走了一条务实的路线:主体是单体应用,但为特定协议设计了独立的 Outpost 微服务。
单体服务器
authentik 服务器本身是一个 Django 应用,包含管理界面、用户门户、认证流程引擎、API 后端。它依赖两个外部组件:
- PostgreSQL:存储用户、组、应用、策略、令牌等所有配置数据
- Redis:消息队列(Celery)和缓存层
认证流程的核心抽象是 Flows 和 Stages。一个 Flow 是一次完整的认证过程(比如登录、注册、密码重置),由多个 Stage 串联而成。每个 Stage 代表一个验证步骤:输入用户名密码、TOTP 验证、WebAuthn 确认、条件策略检查等。管理员可以可视化地编排这些 Flow,定义不同的认证路径。
Outpost 微服务
Outpost 是 authentik 架构中有意思的部分。它把四种协议的执行从主服务器中拆分出来,用 Go 语言独立实现:
Proxy Outpost:为不支持原生认证协议的应用提供反向代理认证。当 NGINX、Traefik 或 Caddy 收到请求时,Outpost 检查用户的认证状态。如果未登录,重定向到 authentik 登录页面;已登录则放行,可选地把用户信息注入 HTTP Header 传给后端应用。
LDAP Outpost:LDAP 是二进制协议,直接在 Django/Python 里处理不自然。Go 生态有成熟的 LDAP 库(go-ldap),Outpost 用 Go 监听 LDAP 请求,转发给 authentik 服务器验证。启用缓存后,频繁的 LDAP 查询可以命中 Outpost 本地内存,减少到服务器的往返。
RADIUS Outpost:RADIUS 用于 Wi-Fi 认证和网络设备接入。这个协议本身安全性有限,把 Outpost 部署在靠近接入点(AP)或交换机的位置,可以缩短 RADIUS 流量的传输路径,其余验证事务走 HTTPS 回到 authentik 服务器。
RAC Outpost:远程访问控制器,基于 Apache Guacamole 实现 RDP、SSH、VNC 的远程连接。Outpost 内运行 guacd 进程处理协议转换,用户通过浏览器就能远程操作服务器,不需要 VPN 客户端。
这个设计的好处是 Outpost 可以部署在任何需要的地方。如果你的组织总部在欧洲,但在美国有办公点需要 LDAP 认证,在美国部署 LDAP Outpost 并开启缓存,就能避免每次认证都跨大西洋往返。
部署:Docker Compose 快速起步
authentik 的最小部署要求是 2 核 CPU 和 2GB 内存。官方推荐三种部署方式:
Docker Compose(测试和小规模生产)
# 下载官方 compose 文件
curl -O https://docs.goauthentik.io/compose.yml
# 生成 PostgreSQL 密码和 secret key
echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
# 拉取镜像并启动
docker compose pull
docker compose up -d启动后访问 http://<服务器IP>:9000,系统会提示设置 akadmin 用户的初始密码。compose 文件默认挂载 Docker socket 到 worker 容器,用于自动管理 Outpost 容器。如果担心安全风险,可以移除这个挂载改为手动管理 Outpost,或者使用 Docker Socket Proxy 做权限隔离。
Kubernetes(大规模部署)
官方维护 Helm Chart(github.com/goauthentik/helm),适合需要横向扩展和高可用的大规模部署。authentik 还提供了 Terraform Provider(github.com/goauthentik/terraform-provider-authentik),支持基础设施即代码管理。
其他选项
AWS CloudFormation 模板和 DigitalOcean Marketplace 一键部署也在官方支持列表中。所有部署方式共享同一套配置模型,从 Docker Compose 迁移到 Kubernetes 不需要重写配置。
安全特性
authentik 在安全方面的功能覆盖面值得关注:
多因素认证(MFA):支持 TOTP、WebAuthn/Passkey(硬件和软件)、SMS 和邮件验证。MFA 可以与 Flow 结合,按应用、用户组或条件策略差异化配置。
条件访问策略:管理员可以编写 Python 表达式策略,检查用户属性、组归属、时间窗口、IP 地址等条件。例如"只允许管理员组在工作时间从公司 IP 访问管理后台"。
GeoIP 与异常行程检测:根据登录请求的地理位置和用户的历史行程模式,自动标记可疑登录。如果用户 5 分钟前在中国登录,现在从美国尝试登录,系统会触发异常行程告警。
账户锁定(Account Lockdown):一键应急按钮,立即停用账户、清除密码、终止所有会话、撤销令牌。在账户泄露场景下快速止损。
设备合规检查:通过 Fleet(mTLS 证书)和 Google Chrome Device Trust 连接器检查设备安全态势,不满足条件的设备被拒绝访问。
审计日志:字段级别的变更追踪,满足合规审计需求。所有用户操作、管理员变更、认证事件都被记录。
authentik vs Keycloak vs Authelia
自托管 IdP 领域有三个主流选择,它们适合的场景差异明显:
| 维度 | authentik | Keycloak | Authelia |
|---|---|---|---|
| 技术栈 | Python/Django + Go | Java/Quarkus | Go |
| 内存需求 | ~2GB | ~1GB+(JVM 开销大) | 极低 |
| 协议支持 | OIDC/SAML/LDAP/RADIUS/SCIM/Proxy | OIDC/SAML/LDAP(更成熟) | OIDC/Forward Auth |
| 管理界面 | 现代 Web UI | 功能全面但复杂 | 无完整管理 UI |
| Flow 可视化编排 | 支持,高度可定制 | 支持,配置复杂 | 不支持 |
| Proxy Provider | 内置,三模式 | 需额外配置 | 核心功能 |
| 社区规模 | ~24k Star | ~24k Star | ~21k Star |
| 企业支持 | authentik Security 公司 | Red Hat | 无 |
Authelia 最轻量,适合 Homelab 和个人项目。它的核心是 Forward Auth 网关,部署快、资源占用少,但不具备完整的 IdP 功能和可视化管理界面。当你只需要在反向代理后面加一层认证时,Authelia 是最低成本的选择。
Keycloak 是 Red Hat 支持的企业级方案,协议实现成熟度最高,深度集成 Active Directory 和复杂 LDAP 目录。代价是 JVM 带来的资源开销和运维复杂度。大型企业、金融机构、医疗系统如果已经在 Red Hat 生态中,Keycloak 是稳妥选择。
authentik 在两者之间找到了平衡点。它的 UI 比 Keycloak 现代直观,Flow 编排系统让自定义认证流程变得可视化,Proxy Provider 解决了大量不支持原生认证协议的老应用接入问题。需要的资源比 Authelia 多(必须 PostgreSQL + Redis),但远低于 Keycloak 的运维复杂度。适合从 Homelab 升级、中小团队、需要 Proxy 认证和灵活 Flow 的场景。
选择建议可以简化为一个判断:五人以内的 Homelab 选 Authelia;大型企业深度绑 AD 的选 Keycloak;中间地带选 authentik。
实际接入:以 Grafana 为例
authentik 接入应用的方式取决于应用支持的协议。以常见的 Grafana 监控面板为例,通过 OIDC 接入:
- 在 authentik 管理界面创建一个 OAuth2/OpenID Provider,填写重定向 URI(
https://grafana.example.com/login/generic_oauth) - 创建一个 Application,绑定上一步的 Provider
- 在 Grafana 配置文件中添加 OAuth 认证:
[auth.generic_oauth]
enabled = true
client_id = <authentik 提供的 Client ID>
client_secret = <authentik 提供的 Client Secret>
auth_url = https://auth.example.com/application/o/authorize/
token_url = https://auth.example.com/application/o/token/
api_url = https://auth.example.com/application/o/userinfo/- 配置 authentik 的 Property Mapping,把 authentik 中的组和角色映射为 Grafana 能识别的 claim
对于不支持任何认证协议的老旧应用(比如旧的 PHP 系统或静态站点),用 Proxy Provider 的 Forward Auth 模式。Traefik 或 NGINX 收到请求后先咨询 authentik Outpost,未认证的请求被重定向到 authentik 登录页,认证通过后带着 Cookie 回来,Outpost 验证 Cookie 并放行。
版本与许可
authentik 采用半年发布周期,当前稳定版为 2026.5,下一个版本已在预发布阶段。社区版(MIT 许可)包含完整的 IdP 功能:SSO、MFA、Flow 编排、Proxy Provider、LDAP/RADIUS/SCIM 支持。企业版额外提供 FIPS 合规、企业 SSO 源(与现有企业目录深度集成)、RAC 远程访问增强功能以及商业 SLA 支持。
项目由 Authentik Security Inc.(一家公共利益公司)维护,代码完全开源,社区贡献通过 GitHub 和 Discord 协调。这意味着即使不购买企业版,社区版的功能也足以覆盖绝大多数中小型组织的身份管理需求。