authentik
学会学习的人,是非常幸福的人。—— 米南德
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 的核心介绍没有绕弯子,只有几层重点:
- 它是开源 IdP
- 它面向现代 SSO
- 它支持多种主流协议
- 它适用于自托管场景
- 规模可以从小型实验室到大型生产集群
这类介绍看似平实,反而更有说服力。因为它没有用一大堆抽象词堆砌“下一代身份平台”的宏大叙事,而是老老实实把自己放在“身份接合层”的位置上。
对于很多团队来说,这种克制其实非常重要。认证系统不是拿来炫技的,它更像一根总线,平时不该太显眼,但一旦缺了,所有入口都会乱。
它支持的协议组合,决定了它天然站在“连接层”而不是“单点功能层”
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 初始化时依赖的几个上下文对象:
ConfigCurrentTenantSessionUser
其中:
Config包含根配置,也带有当前用户或匿名状态下的 permissions 信息CurrentTenant描述 Brand 信息,比如 themes、logos、favicon,以及默认登录、登出、密码恢复 flowsSessionUser则是当前登录用户,包括 username、display name 和各种状态
还有一个额外提到但使用较少的 Version 对象,主要用于展示版本信息和检查升级。
这部分非常值得玩味。因为它说明 authentik 的 WebUI 并不是简单把页面堆上去,而是把“租户”“品牌”“当前用户”“权限”等身份上下文当成界面运行的底板。换句话说,这个 UI 天然就是围绕身份系统自身在组织。
它的 UI 并不把“管理员”和“用户”混成一锅
从 web/README.md 的结构描述里能看出,authentik 并没有采用那种所有功能堆在一个导航里的处理方式,而是让 Flow、User、Admin 各有自己的 base URL、router 和职责。
这背后体现出的思路其实很稳:
- 登录与身份流程属于一套体验
- 普通用户访问应用和调整设置是另一套体验
- 管理员处理身份系统配置,又是第三套体验
对于一个身份提供者来说,这种边界划分很自然,也很必要。因为认证系统本来就同时服务多种角色,而不同角色进入系统时,看到的世界不该是完全一样的。
WebUI 的开发方式,也透出很强的供应链安全意识
web/README.md 有一段特别醒目的内容:repo 根目录的 .npmrc 设置了 ignore-scripts=true,目的是中和 npm 供应链攻击中最常见的 install scripts 风险。
这意味着,如果直接运行 npm ci,依赖虽然会装上,但像 esbuild 和 chromedriver 这样的工具会因为跳过重建而无法正常工作。README 因此建议从 repo root 使用:
1 | make node-install |
或者完整引导安装:
1 | make install |
如果绕过 make,则需要手动执行重建:
1 | npm rebuild --ignore-scripts=false --foreground-scripts \ |
这段内容很能体现 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.
当认证环境已经变成一张复杂网络时,最珍贵的能力,往往不是再多一块炫目的功能面板,而是那层真正能把所有连接稳稳粘住的胶。
