Authentik 是一个用 Python/Django 编写的开源身份验证与授权平台,2020 年由 Jens Langhammer 创建,当前最新稳定版为 2026.5.3(2026 年 6 月发布),GitHub 22k+ star。它的核心差异点在于:用**可视化流程构建器(Flow Builder)**替代硬编码的认证逻辑,用 Outpost 代理 将认证能力延伸到任意网络边界,同时保持 Python 生态的灵活性和可编程性。

核心设计思路

Authentik 的设计围绕三个核心概念展开:

  1. Flow(流程):一切认证行为——登录、注册、MFA 验证、密码重置、用户设置——都是可拖拽编排的流程。你可以像搭积木一样组合"用户名密码验证 → TOTP 验证 → 用户信息确认"形成一条完整的登录流水线。
  2. Outpost(前哨):Authentik 核心不直接面向外部流量,而是通过 Go 编写的轻量 Outpost 代理(LDAP Outpost、Proxy Outpost、Radius Outpost)部署在目标网络内,作为认证网关。
  3. Policy / Binding(策略与绑定):权限控制通过表达式策略实现,支持 Python 表达式、用户属性、IP 范围等条件,策略可绑定到 Flow、应用、属性映射等任何资源上。

架构全景

  flowchart TB
    subgraph "用户侧"
        U[用户浏览器]
        APP[下游应用]
    end

    subgraph "Authentik 核心"
        WS[Web Server\nDjango + Channels]
        DB[(PostgreSQL)]
        REDIS[(Redis\n缓存 + WebSocket)]
        CELERY[Celery Worker\n后台任务]
    end

    subgraph "Outpost 层"
        PO[Proxy Outpost\nGo 反向代理]
        LO[LDAP Outpost\nGo LDAP 服务器]
        RO[Radius Outpost]
    end

    U -->|HTTPS| PO
    U -->|登录页面| WS
    APP -->|LDAP 认证| LO
    PO -->|OAuth2/OIDC/SAML| WS
    LO -->|内部 API| WS
    RO -->|内部 API| WS
    WS --> DB
    WS --> REDIS
    WS --> CELERY

    style WS fill:#4a90d9,color:#fff
    style PO fill:#e67e22,color:#fff
    style LO fill:#e67e22,color:#fff

核心(Django + PostgreSQL + Redis)负责策略决策、用户管理和流程编排;Outpost 负责协议转换和流量代理。两者通过内部 API 通信,Outpost 可部署在完全不同的网络区域。

关键功能

可视化流程构建器(Flow Builder)

这是 Authentik 最突出的差异化能力。每一个认证流程都是一张有向图:

  flowchart LR
    START((开始)) --> LOGIN[用户名/密码] --> MFA_CHOICE{需要 MFA?}
    MFA_CHOICE -->|是| TOTP[TOTP 验证] --> CONSENT[用户同意]
    MFA_CHOICE -->|否| CONSENT
    CONSENT --> REDIRECT[重定向回应用]

你可以为不同应用绑定不同的认证策略:GitLab 只要求密码登录,而 Kubernetes Dashboard 额外要求 TOTP + WebAuthn。这些不需要改代码,在管理界面拖拽配置即可。

已有内置 Stage 类型:用户名密码、TOTP、WebAuthn/Passkey、Duo、短信、邮箱验证码、验证码(Captcha)、用户信息确认、Prompt(自定义输入)、用户写入/更新等。

Outpost 代理架构

Outpost 是 Go 语言编写的轻量级代理,负责协议层面的实际工作:

Outpost 类型作用部署位置
Proxy Outpost反向代理 + 认证网关,支持 OAuth2/OIDC/SAML应用前端网络
LDAP Outpost将 Authentik 用户暴露为 LDAP 服务需要 LDAP 集成的网络
Radius Outpost支持 RADIUS 协议(网络设备认证)网络设备可达区域

每个 Outpost 通过 WebSocket + 内部 API 与核心保持连接,核心下发配置和策略更新。Outpost 是无状态的,可水平扩展。

协议支持

  • OAuth 2.0 / OpenID Connect:完整 Provider 实现,支持授权码、PKCE、Client Credentials、Device Code 等流程
  • SAML 2.0:IdP 角色,支持 SP 元数据导入
  • LDAP:通过 LDAP Outpost 暴露,兼容 LDAP 客户端和传统应用
  • Proxy:通过 Proxy Outpost 为任意 HTTP 应用提供认证网关
  • SCIM:支持用户/组同步到下游应用

多租户与 RBAC

Authentik 原生支持多租户,每个租户可以有独立的用户、组、应用和流程。权限模型基于 RBAC + 表达式策略:

  • 用户 → 组 → 角色
  • 表达式策略可叠加到任何对象上(基于用户属性、IP、时间等)
  • 策略可绑定到 Flow、应用、属性映射

快速部署(Docker Compose)

官方推荐 Docker Compose 起步,搭配 PostgreSQL 和 Redis:

# docker-compose.yml(最小示例)
version: "3.8"
services:
  postgresql:
    image: docker.io/library/postgres:16-alpine
    environment:
      POSTGRES_DB: authentik
      POSTGRES_USER: authentik
      POSTGRES_PASSWORD: changeme
    volumes:
      - pg_data:/var/lib/postgresql/data

  redis:
    image: docker.io/library/redis:alpine

  server:
    image: ghcr.io/goauthentik/server:2026.5.3
    command: server
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: changeme
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_SECRET_KEY: "请生成一个长随机字符串"
    ports:
      - "9000:9000"
    depends_on:
      - postgresql
      - redis

  worker:
    image: ghcr.io/goauthentik/server:2026.5.3
    command: worker
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: changeme
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_SECRET_KEY: "请生成一个长随机字符串"
    depends_on:
      - postgresql
      - redis

volumes:
  pg_data:

启动后访问 http://localhost:9000/if/flow/initial-setup/ 完成初始化,设置管理员账号和密码。

生产环境建议:PostgreSQL 使用外部托管或主从复制,Redis 使用 Sentinel/Cluster,Server 和 Worker 水平扩展,前置 Nginx/Traefik 处理 TLS 终结。

Authentik vs Keycloak 对比

维度AuthentikKeycloak
技术栈Python/Django + Go OutpostJava/Quarkus
最新版本2026.5.3(月度发布)26.x(社区)/ 28.x(RH SSO)
许可证MIT(核心),企业功能需商业许可Apache 2.0
认证流程可视化 Flow Builder,拖拽编排认证流程通过 SPI + Authentication Flow 配置
协议支持OIDC、SAML、LDAP、Proxy、RADIUSOIDC、SAML、LDAP、Kerberos
用户管理Web UI + API + SCIMWeb UI + Admin REST API + SCIM
扩展性Python 表达式策略 + Celery 任务Java SPI 插件 + Event Listener
部署复杂度Docker Compose 起步,K8s 可用 HelmOperator/Helm,K8s 原生
多租户原生支持通过 Realm 实现
资源占用中等(Django + 多个 Outpost)较低(Quarkus 单体)
社区生态增长中,22k+ GitHub star成熟,Red Hat 背书
中文体验界面支持中文,文档以英文为主界面支持中文(翻译生硬),中文社区资源更多

选择建议

选 Authentik 的场景

  • 团队以 Python 技术栈为主,需要灵活定制认证流程
  • 有大量传统 LDAP 应用需要接入现代 IAM
  • 需要可视化流程编排,降低认证逻辑的运维门槛
  • 多租户 SaaS 场景需要独立的租户隔离

选 Keycloak 的场景

  • 需要最全面的协议支持和最成熟的生态
  • 团队熟悉 Java 生态,需要 SPI 级别深度定制
  • 已有 Keycloak 运维经验或 Red Hat 技术栈
  • 需要支撑 10 万+ 用户的超大规模场景

两者都选:可以用 Keycloak 做主 IdP,Authentik 做特定应用的认证网关(通过 OIDC 联合),或在不同业务线按技术栈分开部署。

常见问题(FAQ)

Authentik 的 Flow Builder 会不会有性能问题?

Flow 本质是状态机,每次登录请求按流程定义逐步执行。单步 Stage 的执行开销很小(毫秒级),实际瓶颈通常在数据库和 Redis 上。生产环境通过水平扩展 Worker 和 Server 进程来承载并发。

从 Keycloak 迁移到 Authentik 需要多久?

取决于集成复杂度。如果下游应用都走标准 OIDC/SAML,迁移主要是:导出用户 → 重建应用配置 → 切换回调地址 → 并行运行验证。用户密码可以通过兼容哈希格式导入(Authentik 支持 PBKDF2、bcrypt 等常见格式)。激进迁移 2-3 天,保守迁移 1-2 周渐进切换。

Authentik 支持 Kubernetes 部署吗?

支持。官方提供 Helm Chart:helm repo add authentik https://charts.goauthentik.io,可以在 K8s 上部署 Server、Worker 和 Outpost。Outpost 支持以 Sidecar 或独立 Deployment 方式运行。

Outpost 挂了会影响核心认证吗?

LDAP/Proxy Outpost 挂了只影响通过该 Outpost 接入的应用,核心的 OIDC/SAML 端点不受影响(这些由 Server 直接处理,不经过 Outpost)。Outpost 本身是无状态的,重启会自动从核心拉取最新配置,恢复时间通常在秒级。

Authentik 能替换 Okta/Auth0 吗?

对中小规模团队可以。Authentik 覆盖了 SSO、MFA、用户生命周期管理等核心 IDaaS 能力,成本几乎为零(自建基础设施)。但缺少 Okta 的数千个预置应用集成、自适应 MFA、Workflows 编排等企业特性。对于需要企业 SLA 和数据合规认证的场景,商业 IDaaS 仍然是更稳妥的选择。

小结

Authentik 用 Python 技术栈 + 可视化流程 + Outpost 代理的组合,在开源 IAM 领域提供了一个与 Keycloak 有足够差异化的选择。它的 Flow Builder 降低了认证流程的运维门槛,Outpost 架构让身份能力可以延伸到网络边界之外。如果你的团队以 Python/Go 为主,或者需要快速搭建一个灵活、可编排的中等规模 IAM 系统,Authentik 值得认真评估。

更多源码和文档参见 Authentik GitHub,部署示例参考 官方文档。如需对比其他方案,参见本书 第17章:IDaaS 方案全景对比