学会学习的人,是非常幸福的人。—— 米南德

authentik:把零散认证协议、入口和身份流,粘成一套真正能落地的 SSO 体系

在很多基础设施项目里,最难的一件事往往不是“有没有功能”,而是“能不能把那些本来就复杂、分散、彼此不太友好的东西,真正粘起来”。

身份认证这件事尤其如此。

系统多了,登录方式多了,协议多了,用户入口多了,管理需求也跟着变得层层叠叠。你会发现,认证从来不是单独的一块拼图,它更像是一堆已经摆上桌的拼图边角:SAML 一块,OAuth2/OIDC 一块,LDAP 一块,RADIUS 一块,代理入口又是一块,自托管环境和大规模生产环境又是另一块。真正费劲的,往往不是再多支持一个协议,而是把这些东西接稳、接顺、接成一套能工作的整体。

authentik 的仓库 description 很短,只有一句:

The authentication glue you need.

这句话写得很轻,但其实很准。它不是在强调自己多么花哨,而是在强调自己扮演的角色:那个把认证体系粘起来的胶水

项目地址:/goauthentik/authentik


它首先是一个现代 SSO 的开源身份提供者

README 对 authentik 的定义非常直接:

它是一个 open-source Identity Provider (IdP) for modern SSO

同时,它支持:

  • SAML
  • OAuth2/OIDC
  • LDAP
  • RADIUS
  • 以及更多能力

而且它从一开始就明确面向 self-hosting,覆盖范围从 small labs 一直到 large production clusters

这段描述其实已经把 authentik 的核心气质勾勒出来了:它不是只为某个单一场景准备的轻量登录模块,而是一套试图在不同规模、不同协议环境中承担身份入口职责的系统。


“认证胶水”这个定位,恰好说中了它的价值

很多项目喜欢把自己描述成平台、门户、中台、统一引擎,但 authentik 用了一个更具体也更有画面感的词:glue

这个词之所以妙,是因为它没有假装世界很整齐。相反,它默认你面对的认证环境本来就是碎的、杂的、历史包袱不少的。你可能已经有一部分系统讲 SAML,一部分服务跑 OAuth2/OIDC,一些老系统还依赖 LDAP,某些网络访问场景又需要 RADIUS。每一样单拿出来都不陌生,但真正把它们组织到一起,往往才是最费心的部分。

authentik 给人的感觉,就是那种不想再让你到处拿胶带缠接口的项目。它试图提供一个统一的身份提供者,让这些协议和接入方式能够在同一个身份体系里协作起来。


README 写得不长,但项目定位非常稳定

从 README 可见,authentik 的核心介绍没有绕弯子,只有几层重点:

  1. 它是开源 IdP
  2. 它面向现代 SSO
  3. 它支持多种主流协议
  4. 它适用于自托管场景
  5. 规模可以从小型实验室到大型生产集群

这类介绍看似平实,反而更有说服力。因为它没有用一大堆抽象词堆砌“下一代身份平台”的宏大叙事,而是老老实实把自己放在“身份接合层”的位置上。

对于很多团队来说,这种克制其实非常重要。认证系统不是拿来炫技的,它更像一根总线,平时不该太显眼,但一旦缺了,所有入口都会乱。


它支持的协议组合,决定了它天然站在“连接层”而不是“单点功能层”

README 里出现的几个关键词,本身就足以说明 authentik 的角色:

  • SAML
  • OAuth2/OIDC
  • LDAP
  • RADIUS

这些协议并不是同一时代、同一风格的产物。它们背后各自代表着不同的系统接入方式和不同的组织现实。一个项目如果同时把这些能力纳入自己的定位,通常意味着它并不准备只做一个“给新应用接登录”的单点方案,而是要面对更复杂的身份接入版图。

也正因为如此,description 里的那句 “The authentication glue you need.” 才显得格外贴切。它不是在炫耀协议名单,而是在暗示:你那些彼此风格不同的认证需求,最终还是需要有个地方把它们连起来。


从安装方式就能看出,它面对的是不同体量的部署现实

README 的 Installation 部分没有只给一种答案,而是按场景给了几条路径:

  • Docker Compose:推荐用于 small/test setups
  • Kubernetes(Helm Chart):推荐用于 larger setups
  • AWS CloudFormation:可通过官方模板部署到 AWS
  • DigitalOcean Marketplace:提供官方 Marketplace app 的一键部署方式

这几种安装方式放在一起看,会很容易看出 authentik 的部署观念:它并不假设所有用户都在同一种基础设施里,也不试图把部署入口压成单一形态。

小规模场景可以从 Docker Compose 起步,大一些的环境可以走 Kubernetes,云上使用者也有面向 AWS 和 DigitalOcean 的路径。这种分层很务实,恰好对应了 README 前面那句“从 small labs 到 large production clusters”的定位。


它不是只顾后端协议,界面层也被明确视作产品的一部分

如果只看主 README,你会知道 authentik 有截图,但真正有意思的是 web/README.md 里对前端界面的描述。

这个文件一开头就说得很坦白:文档暂时还不会特别完整,但至少先开始说明。紧接着,它并没有只讲怎么跑起来,而是认真解释了 authentik UI 的理论模型

这种写法很少见,也很有意思。

它把 authentik 的 UI 拆成了五个应用,其中两个是比较轻量的应用,另外三个是真正的核心应用。从用户体验视角看,三个主要应用分别是:

  • Flow
  • User
  • Admin

其中:

  • Flow:根据 URL 展示表单,请求用户输入以完成任务,其中一些任务要求登录,但有些任务本身就是登录流程
  • User:给用户提供其可访问应用及部分用户设置
  • Admin:给拥有 super-user 权限的人提供 authentik 的管理能力

这组划分很说明问题。它让 UI 不是一个“大后台”,而是按照使用语境明确拆成了不同入口。


前端模型里,身份上下文本身就是第一层结构

web/README.md 还专门讲了 UI 初始化时依赖的几个上下文对象:

  • Config
  • CurrentTenant
  • SessionUser

其中:

  • Config 包含根配置,也带有当前用户或匿名状态下的 permissions 信息
  • CurrentTenant 描述 Brand 信息,比如 themes、logos、favicon,以及默认登录、登出、密码恢复 flows
  • SessionUser 则是当前登录用户,包括 username、display name 和各种状态

还有一个额外提到但使用较少的 Version 对象,主要用于展示版本信息和检查升级。

这部分非常值得玩味。因为它说明 authentik 的 WebUI 并不是简单把页面堆上去,而是把“租户”“品牌”“当前用户”“权限”等身份上下文当成界面运行的底板。换句话说,这个 UI 天然就是围绕身份系统自身在组织。


它的 UI 并不把“管理员”和“用户”混成一锅

web/README.md 的结构描述里能看出,authentik 并没有采用那种所有功能堆在一个导航里的处理方式,而是让 FlowUserAdmin 各有自己的 base URL、router 和职责。

这背后体现出的思路其实很稳:

  • 登录与身份流程属于一套体验
  • 普通用户访问应用和调整设置是另一套体验
  • 管理员处理身份系统配置,又是第三套体验

对于一个身份提供者来说,这种边界划分很自然,也很必要。因为认证系统本来就同时服务多种角色,而不同角色进入系统时,看到的世界不该是完全一样的。


WebUI 的开发方式,也透出很强的供应链安全意识

web/README.md 有一段特别醒目的内容:repo 根目录的 .npmrc 设置了 ignore-scripts=true,目的是中和 npm 供应链攻击中最常见的 install scripts 风险。

这意味着,如果直接运行 npm ci,依赖虽然会装上,但像 esbuildchromedriver 这样的工具会因为跳过重建而无法正常工作。README 因此建议从 repo root 使用:

1
make node-install

或者完整引导安装:

1
make install

如果绕过 make,则需要手动执行重建:

1
2
npm rebuild --ignore-scripts=false --foreground-scripts \
esbuild chromedriver tree-sitter tree-sitter-json

这段内容很能体现 authentik 项目的风格:它不仅在做身份认证本身,也在开发流程上认真看待安全边界。哪怕只是前端依赖安装,它也不愿意轻易把 install scripts 当作理所当然的黑箱。


文档站也不是顺手附带,而是单独维护的一套内容结构

website/README.md 说明,website 目录保存的是 authentik 的文档源文件,包括:

  • technical documentation
  • integration guides
  • API documentation

这个目录基于一个 NPM Workspace 组织,结构上主要包括:

  • website/docs:如何使用 authentik 的主题文档
  • website/integrations:authentik 与第三方服务的集成文档
  • website/api:authentik API 文档

README 还提到,部署由 Netlify 和 GitHub Action workflows 共同处理。

从这些信息里能看出,authentik 并没有把文档当作零碎补充,而是把使用文档、集成文档、API 文档拆成清晰层次。这和它的产品定位其实很一致:当你要做的是“认证胶水”,文档本身就会成为系统落地的一部分。


它非常明确地接受“不同规模、不同接入复杂度”的现实

主 README 里最容易被忽略的一句,其实是这句:

designed for self-hosting from small labs to large production clusters

这句话很短,却决定了 authentik 的很多气质。

它并不是只为某一端服务。它既没有把自己描述成只能在企业大集群里严肃部署的重型系统,也没有把自己缩成只适合家庭实验室玩玩的轻量工具。它从一开始就承认:不同规模的环境都会遇到身份整合问题,而同一套系统需要给出能落地的不同路径。

于是你会看到:

  • 小型测试环境可以走 Docker Compose
  • 更大规模环境可以走 Kubernetes Helm Chart
  • 云平台用户可以有 AWS CloudFormation 和 DigitalOcean Marketplace 路线
  • UI 拆成面向不同角色的界面
  • 文档体系覆盖使用、集成和 API
  • 支持多种认证协议,而不是押注单一方案

这些东西拼在一起,才真正构成了“glue”的含义。胶水之所以重要,不是因为它自己高调,而是因为它要适配的表面原本就不止一种。


从仓库主旨看,它更像身份系统里的“连接器人格”

authentik 给人的感觉,不像那种只强调自己是协议实现、也不像只强调自己是后台界面工具的项目。它更像一个天然处在中间层的角色:

  • 在协议之间连接
  • 在部署场景之间连接
  • 在用户入口与管理入口之间连接
  • 在身份流与 UI 上下文之间连接
  • 在使用文档、集成文档与 API 文档之间连接

这种“连接器人格”非常适合身份基础设施。因为认证从来就不是一个单机世界里的单一动作,而是一整串入口、校验、授权、回跳、展示和管理的协同结果。


README 没有夸张地讲很多“未来愿景”,但这反而让它更像基础设施

有些项目的介绍里,会花很多篇幅强调宏大目标、生态蓝图、革命性体验。authentik 的 README 并不是这种风格。

它的表达更像一位经验丰富的工程师,平静地把该说的重点说清楚:

  • 我是什么
  • 我支持什么
  • 我适合什么规模
  • 你怎么安装
  • 文档和开发入口在哪
  • 安全说明在哪
  • 许可证是什么

这份克制本身就很基础设施。因为真正的认证系统,最重要的往往不是文案有多激昂,而是边界是否明确、接入是否扎实、路径是否清晰。


如果只用一句中文来概括 authentik,大概可以叫“身份系统的粘合层”

它不是在重新发明“登录”这件事,而是在接住已经存在、而且会继续存在的复杂性。

SAML 不会因为你嫌麻烦就消失,OAuth2/OIDC 不会自动覆盖所有场景,LDAP 和 RADIUS 也不会凭空退出历史舞台。现实里的身份系统,往往就是新旧协议并存、不同入口并存、不同规模部署并存。authentik 的价值,恰恰是在这种现实之上,提供一个能自托管、面向现代 SSO、支持多协议的开源 IdP,把这些看起来并不统一的部分粘成一个真正可使用的整体。

所以,description 里那句看似轻描淡写的话,反而成了这个项目最准确的介绍:

The authentication glue you need.

当认证环境已经变成一张复杂网络时,最珍贵的能力,往往不是再多一块炫目的功能面板,而是那层真正能把所有连接稳稳粘住的胶。