Skip to content
Charles Shao
Go back

authentik 统一身份认证(开篇):为什么要统一登录,为什么选 authentik

创建于:
v1.0.0
–views

随着公司发展,内部系统越堆越多:研发有 GitLab、Jenkins、Harbor,运维有 Prometheus、Grafana、JumpServer,全员还要连 VPN,除此之外各个部门之间还散落着许多自建的业务系统。员工每天都在“重置密码”和“想不起来密码”之间挣扎;管理员顾不过来这么多系统,新员工入职开号慢,老员工离职又总会漏关几个权限。这些问题平时只觉得是小麻烦,直到某天离职员工的未注销账号被利用,才会变成重大的安全事故。

这个系列记录了一家 500 人规模、用飞书做通讯录的公司,如何使用开源的 authentik 将上述系统整合到一个统一的账号体系下。作为系列开篇,本篇将重点聊聊:统一登录到底能带来什么价值?在众多同类产品中为什么最终拍板了 authentik?上线后,复杂的权限应该如何分层管理?以及在 Kubernetes 上部署到底需要跑哪些组件?

如果想直接看具体协议的配置实战,请移步 架构与接入方式选型,以及本系列对 OIDC、代理认证、LDAP 和 RADIUS 四种协议的详细拆解。内容基于 authentik 2026.8 的官方文档。

TL;DR

Table of contents

Open Table of contents

1. 统一账号登录对公司有什么用

1.1 野蛮生长下的痛点

500 个人,每人平均用 6 个内部系统,意味着全公司有近 3000 个分散在各处的账号。这种野蛮生长通常会带来以下痛点:

1.2 统一登录的真正价值

把这些孤岛系统接到一个身份中心后,带来的改变是结构性的:

不过,上线前也要和团队对齐预期,统一登录不是银弹: 它拦不住已经建立的会话(禁用账号后,员工在 GitLab 已有的登录态还要靠缩短有效期或手动踢下线来解决);它也不包揽应用内部的细粒度权限(authentik 只负责告诉 GitLab“这人是运维组的”,但哪个仓库能推代码,还是 GitLab 自己说了算)。此外,统一登录本身会成为全局单点,一旦它宕机,所有人都无法工作,因此高可用和应急通道是上线的硬前提(见第 5、6 节)。

2. 同类产品有哪些

2.1 先把需求列清楚

这家公司要接入的系统和它们支持的协议:

系统支持的登录方式需要身份中心提供
GitLab、Jenkins、Harbor、各业务系统OIDCOIDC
Prometheus、Alertmanager没有登录功能代理认证
JumpServer、部分老系统、Linux 主机LDAPLDAP 服务端
VPN、交换机、无线RADIUSRADIUS 服务端
员工登录身份中心本身飞书扫码接入飞书作为来源

再加上几条非功能需求:开源、能自己部署在 Kubernetes 上、500 人规模下运维简单、离职能通过 API 自动禁用。

2.2 候选产品怎么选

市面上的身份认证产品不少,但能同时满足上述所有协议的并不多。我们当时评估了以下几个选项:

还有一个常被问到的选项:为什么不直接用飞书登录,省掉身份中心? 飞书开放平台确实提供了网页应用登录,但大多数开源系统(如 GitLab、Grafana)并不认识飞书特有的 OAuth 接口,更不可能通过飞书去做 LDAP 和 RADIUS 认证。访问控制、审计日志也只能散落在各个系统里。飞书最适合的角色是“人员信息来源”,而不是直接充当“身份中心”。

2.3 为什么最终拍板 authentik

综合下来,authentik 是唯一一个能用单一部署解决所有问题的方案:

  1. 一个平台覆盖全部协议:OIDC、SAML、LDAP、RADIUS、代理认证,全部由同一套账号、同一套流程和绑定驱动。
  2. 登录流程高度可编排:登录过程由流程(flow)和步骤(stage)组成,可以在后台像搭积木一样拼装。比如“飞书扫码 → 检查是否离职 → 高危应用再验 TOTP”这种逻辑,用后台配置加几行 Python 表达式就能实现,完全不需要写插件。
  3. 部署足够简单:从 2025.10 版本起,它只依赖 PostgreSQL,Server 和 Worker 都是无状态的,加副本就能扩容;在 Kubernetes 上,LDAP、RADIUS 这些 Outpost 组件可以由 authentik 自动创建和升级。

当然,选择它也要接受它的代价:社区生态相对较小,遇到冷门问题能搜到的资料不多;官方只为最近的版本提供安全更新,必须将其排进日常运维计划中定期升级。

3. authentik 能做什么

3.1 功能全景

按用途分类,authentik 2026.8 提供的主要功能如下(未特别标注的均包含在开源版中):

3.2 开源版 vs 企业版

authentik 企业版使用的是同一个容器镜像,导入 License 后即可解锁额外功能,License 在本地校验,完全支持离线/物理隔离环境。官方企业版功能中,与本系列场景相关的差异主要在以下几点:

总体而言,500 人规模下,开源版完全足够跑通本系列的所有方案。真正值得企业去评估采购企业版的场景通常是:必须使用证书实现无密码 VPN、需要内置的特权访问审批流,或者出于合规要求需要商业支持和 SLA 保障。

4. 权限是怎么控制的

4.1 四层,各管一件事

很多人第一次看 authentik 的后台会困惑:有“绑定”、有“策略”、有“权益”、有“角色”、有“权限”,到底哪个管什么?把它们按回答的问题分开,就清楚了:

authentik 权限控制的四层:应用绑定、流程策略、应用内角色、RBAC 管理权限

前三层管员工能用什么,第四层管管理员能改什么。

4.2 第一层:能不能进这个应用

每个应用都可以绑定组、用户或策略(policy)。员工打开应用时,authentik 先检查这些绑定,不通过就直接拒绝,应用根本收不到请求。

推荐的组设计是两类组分开:

组的类型举例谁来维护用途
部门组飞书/技术中心、飞书/技术中心/运维飞书同步脚本自动维护,不手工改按部门授权:技术中心都能进 GitLab
权限组app-jumpserver、ops-admin走审批后由管理员维护,定期复核跨部门、按需授权的高危权限

部门组跟着飞书走,转岗时自动变化;权限组不随部门自动变化,所以要定期复核。高危系统(JumpServer、生产发布)只绑定权限组,不绑定部门组。

4.3 第二层:登录时要过哪些关

应用绑定决定“谁能进”,流程上的策略决定“进之前要做什么”。流程由一个个步骤组成,每个步骤也可以绑定策略,决定这一步对谁生效。常用的策略类型:

典型用法:所有人飞书扫码;ops-admin 组的人扫码后,再验一次 TOTP 或安全密钥。也可以只给某个高危应用换一条带 MFA 步骤的授权流程,详见 OIDC 篇 的配置要点。

4.4 第三层:应用内角色映射实战

authentik 管到“进门”为止,进门之后能做什么全由应用自己决定:GitLab 里谁能推哪个仓库,Grafana 里谁能改哪个看板,authentik 都不直接参与。它能做的,是在登录成功时把“这个人是谁、属于哪些组、有哪些应用权益”抛给下游应用。

各协议向应用传递身份信息的方式如下:

权益(entitlements) 是 2024.12 引入的特性,专门用来表达“某人在某个应用里的权限”。每个权益只属于一个应用,可以绑定给用户或组。它的好处是应用侧只认自己专属的几个权益名(比如 Grafana Admins),即便公司组织结构大调,应用的配置也无需修改。

那么应用拿到这些信息后怎么处理呢?这家公司几个主要系统的做法代表了三种典型的集成深度:

类型一:每次登录实时按组映射角色(推荐) 这是最省心的模式,权限完全由 authentik 决定,移出组后下次登录权限自动掉落。

类型二:只能映射少数全局身份 应用只接受最高维度的权限映射,具体的业务权限仍需在应用内维护。

类型三:只认人,权限全在应用里 authentik 只负责证明“这个人是谁”,其余所有授权规则都在应用内配置。

以 Argo CD 为例,把 ops-admin 组设为管理员,研发负责人组 rd-leads 设为只读,其余人没有任何权限:

# argocd-rbac-cm
data:
  policy.default: ""
  policy.csv: |
    g, ops-admin, role:admin
    g, rd-leads, role:readonly
  scopes: "[groups]"

在应用内控制权限时,请牢记以下原则:

4.5 第四层:谁能管理 authentik 本身

前三层管的是员工能用什么,第四层管的是管理员能在 authentik 后台做什么。从 2025.12 起,authentik 的管理权限完全基于角色(RBAC):

合理的角色划分通常如下:

切记:RBAC 只管 authentik 里的对象,不管谁能访问下游应用。给某人赋予了“查看 GitLab 应用对象”的权限,并不会让他能登录 GitLab;能不能登录 GitLab 永远只看第一层的绑定。

5. 部署后会有哪些 Pod

5.1 组件和拓扑

官方推荐使用 Helm chart 将 authentik 部署到 Kubernetes。部署完成并接入 LDAP、RADIUS 后,Namespace 里的拓扑如下:

authentik 在 Kubernetes 上的部署拓扑:server、worker、LDAP 和 RADIUS outpost、飞书同步 CronJob,以及外部 PostgreSQL

核心只有 Server 和 Worker 两种 Pod,状态全部下沉在 PostgreSQL 里。

整个集群里主要跑着这几类 Pod:

关于部署架构,有几点需要特别注意:

kubectl get pods -n authentik 的样子大致如下:

NAME                                READY   STATUS      RESTARTS   AGE
authentik-server-6c8f9d7b5d-2xkqp   1/1     Running     0          3d
authentik-server-6c8f9d7b5d-9mzt4   1/1     Running     0          3d
authentik-worker-58d7c6f9b8-hq7wn   1/1     Running     0          3d
authentik-worker-58d7c6f9b8-vb2lc   1/1     Running     0          3d
ak-outpost-ldap-7f6b8c9d4f-k8s2d    1/1     Running     0          3d
ak-outpost-ldap-7f6b8c9d4f-p4nzr    1/1     Running     0          3d
ak-outpost-radius-5b9d7c8f6-r7wqm   1/1     Running     0          3d
ak-outpost-radius-5b9d7c8f6-xt5vj   1/1     Running     0          3d
feishu-sync-29371230-7hk2p          0/1     Completed   0          4m

5.2 Helm values 核心配置项

一个最小化的生产级配置,核心原则就是:关掉自带的测试数据库、接入外部 PostgreSQL、并保证 Server 和 Worker 至少双副本。

authentik:
  secret_key: "<用 openssl rand 60 | base64 生成>"
  postgresql:
    host: "authentik-pg-rw.database.svc"
    name: "authentik"
    user: "authentik"
    password: "<强烈建议从 Secret 注入>"

postgresql:
  enabled: false # 必须关闭 Chart 自带的测试数据库

server:
  replicas: 2
  ingress:
    enabled: true
    ingressClassName: nginx
    hosts:
      - auth.company.com

worker:
  replicas: 2

注意:上述配置中的密钥和数据库密码千万不要明文写在 values 文件里,生产环境应当使用 Secret 或外部密钥管理系统(如 Vault / External Secrets)进行注入。完整的可配置项请以 ArtifactHub 上的 Chart 官方文档为准。

5.3 高可用怎么做

500 人规模下,两个 Server、两个 Worker 的资源占用微乎其微。真正需要你花心思的,是保障数据库的稳定,以及留好应急通道。

6. 上线顺序建议

建议按风险从低到高,分批次逐步接入:

  1. 先把 authentik 自身地基打稳:完成高可用部署、数据库备份、监控告警接入,强制超级管理员开启 MFA,并妥善保管应急账号。
  2. 跑通飞书链路:打通扫码登录和通讯录同步,先在 IT 测试组内验证入职、转岗、离职这三种最核心的生命周期场景。
  3. 接入 OIDC 系统:从内部自建的边缘业务系统,或者 Grafana、Harbor 这类即使出点错影响也不大的系统开始,再过渡到 GitLab、Jenkins。每次接入前,务必先处理好存量账号的关联规则(详见 OIDC 篇)。
  4. 给无登录的系统加代理认证:如 Prometheus、Alertmanager(详见 代理认证篇)。
  5. 最后啃 LDAP 和 RADIUS 的硬骨头:JumpServer、VPN 涉及让员工额外设置一套独立密码,沟通成本和员工不适感最高,建议放在最后(详见 LDAP 篇 和 RADIUS 篇)。

7. 生产取舍与踩坑经验

8. 参考资料


–views
Share this post on:

Previous Post
authentik 统一身份认证 · 架构、核心概念与接入方式选型
Next Post
Kafka 生产踩坑与排障实战:AdTech 企业级线上事故复盘与反模式