Skip to content
Charles Shao
Go back

authentik 统一身份认证 · 架构、核心概念与接入方式选型

创建于:
v1.0.0
–views

在上一篇 开篇 中,我们探讨了统一登录能为一家 500 人公司带来的结构性改变,以及为什么在一众产品中最终敲定了 authentik。它不仅能做 OIDC、SAML 单点登录,还能对外直接提供 LDAP 和 RADIUS 服务,甚至能为没有登录功能的页面套上一层代理认证的“防盗门”。

但这四种接入方式的底层原理千差万别,选错了,要么员工体验极差,要么就会在隐秘的角落留下安全漏洞。

本篇将深入实战,从整体架构设计和核心概念出发,聊聊这四种接入方式在遇到具体业务系统时应该怎么选,以及离职禁用策略在不同协议下何时才会真正生效。

如果你想直接看某一种协议的配置实战和时序图,可以跳转到对应的详解篇:

  1. OIDC:授权码流程、令牌与配置要点
  2. 代理认证:用 Forward auth 给 Prometheus 加一道门
  3. LDAP:虚拟目录、bind 流程与 JumpServer 接入
  4. RADIUS:VPN 与网络设备接入

内容基于 authentik 2026.8 的官方文档。

TL;DR

Table of contents

Open Table of contents

1. 整体架构

在这家公司的设计里,飞书是人员信息的唯一来源,authentik 是唯一的身份中心:

authentik 统一身份架构:飞书作为人员来源,authentik 通过 OIDC、代理认证、LDAP、RADIUS 接入各类系统

飞书管“人是谁”,authentik 管“能进哪里”,各系统只认 authentik。

这个架构有一个必须正视的代价:authentik 成为了全公司所有系统的登录命脉。一旦它发生大面积故障,所有人都将无法登录任何系统,这甚至包括急需连上去排障的运维人员本身(因为 VPN 和 JumpServer 也挂在它上面)。

因此,多副本横向扩展、高可用数据库主备,以及必须预留一条不依赖 authentik 的本地应急通道,是这套架构上线的硬前提。高可用相关的具体思路可以参考 高可用系统设计 和 冗余与容灾。

2. 几个基本概念

authentik 后台里和接入有关的对象:

概念含义举例
Application(应用)一个要接入的系统,员工在应用门户里看到的就是它GitLab
Provider应用用什么协议和 authentik 对接,每个应用对应一个GitLab 用 OAuth2/OpenID Provider
Outpost独立运行的协议组件,替 authentik 对外提供 LDAP、RADIUS、代理认证LDAP outpost
Flow(流程)登录时要走的步骤:识别用户、校验密码、校验 MFA 等default-authentication-flow
Binding(绑定)决定谁能访问某个应用,或某个流程步骤对谁生效GitLab 绑定 飞书/技术中心 组
Source外部身份来源,authentik 作为客户端去接入它飞书

四种接入方式在底层究竟由谁来提供服务:

接入方式对应的 Provider实际承载服务的组件监听端口
OIDCOAuth2/OpenID Providerauthentik-server Pod 本身HTTPS 443
代理认证Proxy Provider内置 Outpost(跑在 server 进程里)HTTPS 443(经过 Nginx)
LDAPLDAP Providerak-outpost-ldap(独立的 Outpost Pod)LDAPS 636
RADIUSRADIUS Providerak-outpost-radius(独立的 Outpost Pod)UDP 1812

这里有一条最容易踩坑的铁律需要牢记:如果一个应用没有配置任何绑定(Binding),那么所有人都能访问它。 每次接入新应用时,务必反复检查绑定关系。

3. 四种接入方式一览

OIDC:员工跳转到 authentik 登录(飞书扫码),authentik 给应用签发 ID token。授权码经过浏览器,令牌在服务器之间直连交换,应用始终拿不到员工密码。最常见的坑是 Provider 不选签名密钥、Redirect URIs 留空、上线后修改 Subject mode。

代理认证:Nginx 用 auth_request 问 authentik 的 Outpost 放不放行,没登录就跳去登录。适合 Prometheus、Alertmanager 这类没有登录功能的系统。它只管“能不能进”,前提是后端只能经由 Nginx 访问。

LDAP:authentik 提供一个只读的虚拟目录,bind 就是在 authentik 里执行一次 bind flow。员工在应用登录框输入 authentik 密码,密码会经过应用。Bind mode 一定选 Direct,Cached bind 下禁用的账号在缓存过期前仍能登录。

RADIUS:VPN 网关和网络设备把员工的用户名密码转给 RADIUS Outpost。authentik 只存不可逆的密码哈希,所以密码认证只支持 PAP;动态码要拼在密码后面输入。

4. 接入协议怎么选

方式员工怎么登录应用能否拿到员工密码能否飞书扫码二次 MFA典型系统
OIDC跳转到 authentik 登录不能能能,扫码后再验一次GitLab、Jenkins、Harbor、Grafana、Argo CD
代理认证跳转到 authentik 登录不能能能Prometheus、Alertmanager
LDAP在应用的登录框输入用户名和 authentik 密码能,收到明文密码不能只能把动态码拼在密码后面JumpServer、老系统
RADIUS在 VPN 客户端或设备上输入设备能拿到不能只能把动态码拼在密码后面VPN、交换机、无线

接入一个新系统时,请严格按照以下优先级来选,能用前面的就绝对不用后面的:

  1. OIDC:系统支持 OIDC 或 OAuth2 登录。现在绝大多数现代系统都支持。
  2. SAML:系统只支持 SAML,常见于商业 SaaS。原理和 OIDC 类似,消息格式是 XML。
  3. 代理认证:系统没有自己的登录功能,或登录功能没法对接外部身份。
  4. LDAP:系统只支持 LDAP,或需要 LDAP 查询用户和组。
  5. RADIUS:VPN 和网络设备,且不支持 SAML 或 OIDC。

越往后,员工体验越差(要单独设密码、不能扫码),应用能接触到的凭据也越多,安全风险越高。

5. 离职禁用后多久真正失效

四种方式都会拒绝已禁用账号的新登录,但对于已经建立的会话,处理方式各不相同:

方式新登录已经登录的会话
OIDC立即拒绝应用的会话继续有效,直到过期。应用支持 back-channel logout 时,authentik 会通知它结束会话
代理认证立即拒绝Outpost 的会话在过期前可能仍有效。紧急时在 authentik 里清除该用户的会话,并确认已失效
LDAPDirect bind 下立即拒绝;Cached bind 下要等缓存过期应用(如 JumpServer)的会话继续有效,要在应用里手动断开
RADIUS立即拒绝已建立的 VPN 连接一般保持到断开,要在 VPN 设备上手动踢下线

所以,“统一身份平台一键禁用”只解决了一半问题。另一半要靠这些措施来兜底:

6. 生产取舍与踩坑经验

飞书账号的安全就是整个平台的安全。 员工扫码后能进入所有接入的系统,飞书账号被盗等于全线失守。飞书侧要对全员开启登录二次验证,飞书管理员要少而可审计(他们能改员工邮箱,间接决定 authentik 里的用户名);高危应用在扫码之后再加一道 authentik 自己的 MFA。

用户名关联要防冒用。 让同步脚本建的账号和扫码登录对上号,最简单的办法是“按用户名关联”(邮箱前缀)。隐患是:如果某个飞书账号的邮箱前缀恰好是 akadmin 或某个服务账号的名字,扫码就能登进那个手工账号。在飞书登录流程里加一个拒绝步骤,只允许带同步标记的账号通过;手工账号的用户名也不要用可能和员工重名的名字。

最容易出事故的是存量账号迁移,而不是协议本身。 GitLab、Jenkins 里早有本地账号。接入单点登录后,如果系统认为新身份和老账号不是同一个人,就会新建一个重复账号,员工的项目、权限、历史记录都留在旧账号下。每接一个系统前,先导出账号和 authentik 比对,查清它按 sub、用户名还是邮箱关联,再找几个真实员工试登录。

认证层和网关、网格是互补关系。 authentik 解决的是“人”登录系统;服务之间的调用鉴权,交给 API 网关 的令牌校验或 Service Mesh 的 mTLS。不要试图让每个内部服务都去走一遍员工的登录流程。

7. 参考资料


–views
Share this post on:

Previous Post
authentik 统一身份认证 · OIDC:授权码流程、令牌与配置要点
Next Post
authentik 统一身份认证(开篇):为什么要统一登录,为什么选 authentik