前言
Authentik 的默认配置能够直接登录,但后台的流程、阶段和策略一多,就容易只记住哪个按钮能用,不清楚它到底经过了哪些检查。这次索性把日常流程重新配置了一遍,逐项测试,再删除已经被替代的默认对象。
上一篇 服务器操作指北(12)Authentik 基本概念、默认配置与部署 介绍了基本概念和部署。这篇继续使用 2026.8.5,从本地登录、MFA、邀请注册开始,接着配置找回密码、个人资料和应用授权。对象使用 doratiger- 前缀,域名统一用 auth.example.com 举例。
邮箱验证和密码恢复依赖可用的 SMTP。本文说明邮件阶段在流程中的职责;实际测试注册和找回密码前,需要完成 SMTP 配置并确认能够发信。
一、配置对象与依赖关系
1.1 流程与阶段创建
以下操作都在管理员界面完成。先区分几个创建入口:
| 对象 | 后台位置 | 创建后如何使用 |
|---|---|---|
| 流程 Flow | 流程和阶段 → 流程 → 创建 | 添加阶段绑定,再由品牌、认证器设置或提供者选择该流程 |
| 阶段 Stage | 流程和阶段 → 阶段 → 创建 | 选择阶段类型;也可在流程内直接创建并绑定 |
| 输入 Prompt | 流程和阶段 → 输入 → 创建 | 在 Prompt Stage 的 Fields 中选中它 |
| 策略 Policy | 自定义 → 策略 → 创建 | 选择策略类型,再绑定到目标或选入表单的 Validation Policies |
| 事件 Event | 事件 → 日志 | 系统执行操作时自动记录,用于核对结果,不需要为每个流程手工新建事件 |
创建流程时,Name、Slug 和 Title 是三个字段。Name 用于后台识别,可以写“DoraTiger 本地密码登录”;Slug 填 doratiger-authentication,用于 URL;Title 是用户打开流程时看到的标题,例如“登录 DoraTiger”。阶段、策略和输入表中的 doratiger-... 则填到各自的 Name,不是让所有对象都填写 Slug。

图为 Authentik 官方文档中的创建表单,用于对照字段位置。官方配图与本文实例的版本、语言和外观可能不同,实际填写值以下文为准。
以本地密码登录为例,创建流程后点击它的名称,进入“阶段绑定(Stage Bindings)”,点击“创建或绑定(Create or bind)”。首次添加时选“创建并绑定新阶段(Bind New Stage)”,选择阶段类型、填写名称与专用字段,再设置绑定顺序并保存。复用已经存在的阶段时,选“绑定已有阶段(Existing Stage)”,搜索对应名称,不要再创建一份。保存后回到列表,确认阶段名称、类型和顺序。阶段绑定操作
只有 Prompt Stage 需要另外准备“输入”。Identification、Password、TOTP Setup 等阶段自带交互界面,不需要自己再造一个用户名框或二维码页。
本篇需要用到的配置关系是:
text1234输入 Prompt ──组成表单──> 输入阶段 Prompt Stage 策略 Policy ──验证提交──> 输入阶段 阶段 Stage ──通过顺序绑定──> 流程 Flow 品牌/凭据设置/身份源/提供者 ──选择入口──> 流程 Flow
先建立被依赖的输入和策略,再建阶段,最后关联入口。配置过程中保留默认登录和一个已登录的管理员窗口;新入口先用测试账号验证,最后再删除默认对象。
1.2 阶段绑定
除下文另有说明,阶段绑定使用:
| 字段 | 设置 |
|---|---|
| Order | 按各流程表格填写 |
| Evaluate on plan | 关闭 |
| Re-evaluate policies | 开启 |
| Invalid response action | Retry |
| 额外策略绑定 | 没有明确需要时不添加 |
输入阶段中的 Validation Policies 是提交后验证;流程或阶段的策略绑定则决定是否执行。密码强度要放到前者。把它绑到阶段入口,可能在用户还没输入密码时就评估了。
还有三种看似相近的“策略关联”,操作位置不同:
| 目的 | 操作位置 | 本文例子 |
|---|---|---|
| 提交表单后检查填写内容 | 编辑 Prompt Stage → Validation Policies | 密码强度、邀请邮箱、个人资料修改权限 |
| 决定整个流程能否进入 | 流程详情 → 策略/组/用户绑定 | 需要额外限制访问的流程 |
| 决定流程中的某一步是否执行 | 流程详情 → 阶段绑定 → 展开对应行 → 创建或绑定策略 | 默认登录中跳过部分阶段的条件策略 |
后两种方式选择已有策略后,还要保存策略绑定;第一种是在阶段表单中选择策略并保存阶段。本文的三个表单校验策略使用第一种方式,不额外绑定到流程入口。已有阶段的复用也只复用阶段内容,各流程中的绑定顺序和条件仍各自设置。策略绑定操作
1.3 密码策略
进入“自定义 → 策略”,点击创建,类型选择“密码策略(Password Policy)”,Name 填 doratiger-password-policy。它负责校验新密码的强度。本次使用以下参数:
| 字段 | 值 |
|---|---|
| Password field | password |
| Check static rules | 开启 |
| Minimum length | 12 |
| 小写字母最少数量 | 2 |
| 数字最少数量 | 2 |
| 大写字母、符号最少数量 | 0 |
| Check zxcvbn | 开启,阈值 2 |
| Check Have I Been Pwned | 开启,允许泄露次数 0 |
填写后保存。此时只是创建了策略对象,还没有让任何表单使用它。配置注册或改密表单时,需要编辑对应 Prompt Stage,在 Validation Policies 中选中 doratiger-password-policy。Password field 的 password 对应输入对象的 Field key,不能填输入的 Name。
泄露密码检查需要服务端出站网络,网络故障应查看策略和请求日志,不能把它当作纯本地长度校验。本篇记录的是实际采用的参数,不代表所有站点都应使用相同强度。
后面的注册、找回密码和登录后改密,都引用这一条策略;日常登录的 Password Stage 验证已有密码,不负责给新密码打分。
二、本地密码登录
在“流程和阶段 → 流程”创建本地密码登录流程:
| 字段 | 填写内容 |
|---|---|
| Name | DoraTiger 本地密码登录 |
| Slug | doratiger-authentication |
| Title | 登录 DoraTiger |
| Designation | Authentication(认证) |
| Authentication requirement | None/No requirement(无身份前提) |
这里允许未登录用户进入,验证身份由流程内的阶段完成。保存后进入该流程的“阶段绑定”,按下面的顺序创建三个阶段:
| 顺序 | 阶段 | 类型与设置 |
|---|---|---|
| 10 | doratiger-login-identification |
Identification;用户字段选择 Username、Email;Password stage 留空;注册、恢复、无密码入口暂时留空 |
| 20 | doratiger-login-password |
Password;只选“用户数据库+标准密码”后端 |
| 100 | doratiger-login-session |
User Login;Session duration、Remember me offset 均为 seconds=0;不终止其他会话 |
- 创建并绑定“用户识别(Identification)”阶段,Name 填
doratiger-login-identification。User fields 选 Username、Email;Sources 暂时不选;Password stage 留空,表示密码校验使用单独阶段。绑定 Order 填10。 - 再创建并绑定“密码(Password)”阶段,Name 填
doratiger-login-password。Backends 只选用户数据库的标准密码后端,绑定 Order 填20。 - 创建并绑定“用户登录(User Login)”阶段,Name 填
doratiger-login-session。按表格设置会话参数,绑定 Order 填100。 - 返回阶段绑定列表,确认依次为用户识别、密码校验、建立会话。这里的阶段名称用于后台检索,不是登录页上的提示文案。

图源为 Authentik 官方流程文档。这是基础密码登录的关系示意图,尚未包含 MFA。
识别阶段先找到 pending_user,密码阶段证明用户掌握该账号的密码,最后的 User Login 才建立登录会话。识别账号本身不等于认证成功。
Password Stage 中看到的四个后端分别服务于标准本地密码、应用程序密码、LDAP 密码和 Kerberos 密码。目前没有用后两种目录认证,普通网页登录也没有要求接受应用程序密码,因此只启用标准密码后端。
识别阶段的 Pretend user exists 已开启,Show matched user 在当前密码登录入口开启。后者会显示匹配用户信息,因此不能宣称这个登录入口完全隐藏账号存在性。找回密码入口会单独关闭它。
打开新流程测试地址:
text1https://auth.example.com/if/flow/doratiger-authentication/?next=%2F
本地登录确认正常后,进入“系统 → 品牌”,编辑当前域名使用的品牌,在默认流程设置中将 Authentication flow 选为“DoraTiger 本地密码登录”,保存。用无痕窗口从站点根地址进入,再测试一次登录。
三、多因素认证与凭据管理
3.1 TOTP 设置
TOTP 设置用于给已登录账号绑定动态验证码应用。按下面的顺序创建:
- 在“流程和阶段 → 流程”创建流程,Name 填“DoraTiger TOTP 设置”,Slug 填
doratiger-totp-setup,Title 填“设置动态验证码”;Designation 选 Stage configuration(阶段配置),Authentication requirement 选 Require authenticated(要求已登录)。 - 打开新流程的阶段绑定,创建并绑定“TOTP 认证器设置(TOTP Authenticator Setup)”阶段,Name 填
doratiger-mfa-totp-setup,Digits 填6,绑定 Order 填0。 - 在“流程和阶段 → 阶段”找到刚创建的阶段,编辑 Configure flow,选择“DoraTiger TOTP 设置”,保存。这个引用让用户凭据页能找到设置入口。
- 用测试账号登录,进入用户设置的“凭据 → MFA 设备”,打开 TOTP 设置,扫描二维码并输入一次验证码。完成后确认凭据列表中出现设备。登录流程绑定 MFA 验证阶段后,再退出并测试登录验证。
3.2 备用恢复码
备用恢复码通过“静态认证器设置(Static Authenticator Setup)”阶段生成:
- 新建流程,Name 填“DoraTiger 备用恢复码设置”,Slug 填
doratiger-recovery-codes-setup,Title 填“生成备用恢复码”;Designation 选 Stage configuration,Authentication requirement 选 Require authenticated。 - 在该流程的阶段绑定中创建 Static Authenticator Setup 阶段,Name 填
doratiger-mfa-recovery-setup;Token count 填10,Token length 填12;绑定 Order 填10。 - 编辑该阶段,把 Configure flow 选为“DoraTiger 备用恢复码设置”,保存。
- 从用户凭据页面进入此设置流程,生成并保存恢复码。MFA 验证阶段配置好后,用其中一个恢复码测试登录,并确认同一码不能再次使用。
每个恢复码使用后失效。用户生成后应自行妥善保存;它用于第二因素应急,不是密码找回邮件中的令牌。
3.3 WebAuthn 设置
在“流程和阶段 → 流程”新建“DoraTiger WebAuthn 设置”,Slug 填 doratiger-webauthn-setup,Title 填“添加安全密钥或 Passkey”,Designation 选 Stage configuration,Authentication requirement 选 Require authenticated。
打开阶段绑定,创建“WebAuthn 认证器设置(WebAuthn Authenticator Setup)”阶段,Name 填 doratiger-mfa-webauthn-setup,绑定 Order 填 10。阶段参数如下:
| 字段 | 值 |
|---|---|
| User verification | Required |
| Resident key requirement | Preferred |
| Configure flow | doratiger-webauthn-setup |
保存阶段后,从用户设置的“凭据 → MFA 设备”进入 WebAuthn 设置,按浏览器提示选择设备并完成注册。Configure flow 选择的是刚创建的设置流程,不是密码登录流程。
浏览器必须通过有效 HTTPS 访问正确域名。用户验证由认证器提供,例如设备 PIN 或生物识别。
当前配置允许不同认证器能力;要使用后面的无用户名 Passkey 登录,应注册支持可发现凭据的 Passkey。若希望强制所有新凭据都可发现,可选择 Required,但那是不同于本次实测设置的取舍。
3.4 MFA 登录
打开“流程和阶段 → 流程 → DoraTiger 本地密码登录 → 阶段绑定”,创建并绑定“认证器验证(Authenticator Validation)”阶段。Name 填 doratiger-login-mfa,它负责登录时验证已有的第二因素。阶段参数如下:
| 字段 | 值 |
|---|---|
| Device classes | Static、TOTP、WebAuthn |
| Not configured action | Configure |
| Configuration stages | 仅选择 doratiger-mfa-totp-setup |
绑定到 doratiger-authentication 的顺序 30,放在密码之后、建立会话之前。已有设备时验证相应设备;没有兼容设备时注入 TOTP 设置步骤。Skip 会允许跳过 MFA,Deny 会拒绝没有设备的用户,这两种行为均不符合当前首次登录引导的目标。认证器验证阶段文档
保存后,阶段列表应为 Order 10 用户识别、20 密码、30 MFA、100 用户登录。用已绑定 TOTP 的账号验证一次,再用未绑定验证器的测试账号确认会进入 TOTP 设置。这里选择的 Configuration stages 是设置阶段 doratiger-mfa-totp-setup,不是设置流程的 Slug。
3.5 独立 Passkey 登录
在流程列表新建“DoraTiger Passkey 登录”,Slug 填 doratiger-passkey-authentication,Title 填“使用 Passkey 登录”,Designation 选 Authentication,Authentication requirement 选 None/No requirement。
进入该流程的阶段绑定,先创建认证器验证阶段,再绑定已有的用户登录阶段:
| 顺序 | 阶段 | 配置 |
|---|---|---|
| 10 | doratiger-passkey-validation |
Authenticator Validation;仅 WebAuthn;User verification 为 Required;未配置时 Deny;Configuration stages 留空 |
| 100 | doratiger-login-session |
复用会话建立阶段 |
第一行选择“创建并绑定新阶段”,类型为 Authenticator Validation,Name 填 doratiger-passkey-validation,按表格仅允许 WebAuthn。第二行选择“绑定已有阶段”,搜索 doratiger-login-session,Order 填 100。此流程不添加 Identification 或 Password 阶段。
在 doratiger-login-identification 的 Passwordless flow 中选择它,登录页才会出现无密码入口。
两条登录路径现在分别是:
text12密码登录:识别账号 → 密码 → TOTP/恢复码/WebAuthn → 建立会话 Passkey:WebAuthn 身份及用户验证 → 建立会话
本次使用独立入口,没有把 WebAuthn 自动填充嵌进识别阶段。因此没有照搬默认登录中“已用 Passkey 时跳过密码和 MFA”的两条分支策略。以后合并入口时必须重新检查这一点。
四、邀请注册与邮箱验证
4.1 注册输入
进入“流程和阶段 → 输入”,逐个点击创建。每个输入都有后台 Name、数据字段键 Field key 和用户看到的 Label。以邮箱为例,Name 填 doratiger-enrollment-email,Field key 填 email,Label 填“邮箱”;Type 选 Email,Required 开启,Order 填 30,初始值留空。
按相同方式创建下面五项,Required 均开启,初始值及初始值表达式均不设置:
| 名称 | Field key | 类型 | 顺序 |
|---|---|---|---|
doratiger-enrollment-username |
username |
Username | 10 |
doratiger-enrollment-name |
name |
Text | 20 |
doratiger-enrollment-email |
email |
30 | |
doratiger-enrollment-password |
password |
Password | 40 |
doratiger-enrollment-password-repeat |
password_repeat |
Password | 50 |
标签分别填写用户名、显示名称、邮箱、密码、确认密码。两个 Password 输入在同一阶段,原生会检查它们一致,无需额外写比较策略。
4.2 邀请邮箱校验策略
邀请携带 fixed_data.email。注册时应验证提交邮箱与邀请一致,不能只靠输入框初始值或前端只读状态。
在“自定义 → 策略”点击创建,选择“表达式策略(Expression Policy)”,Name 填 doratiger-enrollment-invited-email。这条策略比较邀请中的邮箱和表单提交的邮箱。在 Expression 字段填入:
python123456789101112131415161718192021222324from authentik.flows.views.executor import SESSION_KEY_PLAN plan = request.http_request.session.get(SESSION_KEY_PLAN) if not plan: ak_message("注册会话已失效,请联系管理员重新获取邀请。") return False invitation = plan.context.get("invitation") if not plan.context.get("invitation_in_effect") or invitation is None: ak_message("请通过有效邀请链接注册。") return False expected = (invitation.fixed_data.get("email") or "").strip() submitted = ( request.context.get("prompt_data", {}).get("email") or "" ).strip() if not expected: ak_message("邀请未指定邮箱,请联系管理员重新创建邀请。") return False if submitted.casefold() != expected.casefold(): ak_message("请使用邀请指定的邮箱注册。") return False return True
保存策略后,在注册的 Prompt Stage 中将它与密码策略一起选入 Validation Policies。两个检查都需要通过:密码合格不能替代邀请邮箱匹配,邮箱匹配也不能跳过密码检查。不要把邀请邮箱策略绑定到整个流程入口,入口处尚未完成表单提交。
这段使用了当前版本的内部执行计划常量,升级时需要重新验证。策略测试器没有真实邀请会话,不能替代带邀请链接的注册测试。
4.3 注册流程阶段绑定
在流程列表创建“DoraTiger 邀请注册”,Slug 填 doratiger-enrollment,Title 填“创建 DoraTiger 账号”,Designation 选 Enrollment(注册),Authentication requirement 选 Require unauthenticated(要求未登录)。保存后进入阶段绑定。
先按以下顺序完成对象创建和关联:
- 创建“邀请(Invitation)”阶段,Name 填
doratiger-enrollment-invitation,关闭 Continue flow without invitation,绑定 Order10。这样没有邀请令牌的请求不能进入注册表单。 - 创建“输入(Prompt)”阶段,Name 填
doratiger-enrollment-prompt。Fields 选择已创建的五个注册输入;Validation Policies 同时选择密码强度策略和邀请邮箱校验策略,绑定 Order20。输入框的显示顺序由各 Prompt 的 Order 决定。 - 创建“用户写入(User Write)”阶段,Name 填
doratiger-enrollment-write。用户创建模式选择 Always Create,开启 Create users as inactive,User type 选 Internal,用户路径填users/invited,绑定 Order30。 - 创建“邮件(Email)”阶段,Name 填
doratiger-enrollment-email-verification,使用全局 SMTP,开启 Activate user on success,Token expiry 填minutes=30,Template 填email/account_confirmation.html,绑定 Order40。 - 选择“绑定已有阶段”,搜索
doratiger-login-mfa,绑定 Order50。新账号还没有验证器时,由这个阶段引导配置 TOTP。 - 再绑定已有的
doratiger-login-session,Order 填100,用于所有验证成功后建立会话。
保存后逐行核对:
| 顺序 | 阶段 | 设置 |
|---|---|---|
| 10 | doratiger-enrollment-invitation |
Invitation;Continue flow without invitation 关闭 |
| 20 | doratiger-enrollment-prompt |
Prompt;选择五个注册输入;Validation Policies 选择密码策略和邀请邮箱策略 |
| 30 | doratiger-enrollment-write |
User Write;Always Create;Create users as inactive 开启;User type 为 Internal;路径 users/invited |
| 40 | doratiger-enrollment-email-verification |
Email;使用全局 SMTP;Activate user on success 开启;Token expiry 为 minutes=30 |
| 50 | doratiger-login-mfa |
复用验证器检查;新用户尚未设置时进入 TOTP 配置 |
| 100 | doratiger-login-session |
建立登录会话 |
邮件模板使用原生 email/account_confirmation.html。
这里先创建停用用户,再发验证邮件,是因为邮件阶段需要一个已保存的 pending_user。成功验证邮箱后激活账号,随后配置 MFA 并登录。不能把会话建立提前到邮箱验证之前。
4.4 邀请创建与验证
创建 Invitation Stage 后刷新后台,进入“目录 → 邀请”;本版本实际路由是 /if/admin/#/flow/stages/invitations。点击创建,填写一个方便辨认的邀请名称,例如“测试用户注册”;Flow 选择“DoraTiger 邀请注册”,Single use 开启,设置过期时间。在固定数据(对应 fixed_data)中填写:
json1{"email": "invitee@example.com"}
复制原生邀请链接,或在 SMTP 配置完成后使用发送邮件操作。用未登录窗口打开,检查无邀请不能注册、邮箱不匹配不能提交、验证邮件后才能激活、MFA 配置后才能登录。
五、找回密码与登录后改密
5.1 找回密码流程
在流程列表创建“DoraTiger 找回密码”,Slug 填 doratiger-password-recovery,Title 填“找回密码”,Designation 选 Recovery(恢复),Authentication requirement 选 None/No requirement,保存。
在该流程的阶段绑定中创建 Identification 阶段,Name 填 doratiger-recovery-identification,绑定 Order 10。User fields 选择 Username、Email,开启 Pretend user exists,关闭 Show matched user。Sources、密码阶段及各种关联流程均留空。未知账号也能进入相同的已发邮件提示,但不会真实发送恢复邮件,避免通过这个入口直接探查账号。
进入“流程和阶段 → 输入”,创建两个新密码字段:
| Name | Field key | Label | Type | Required | Order |
|---|---|---|---|---|---|
doratiger-recovery-password |
password |
新密码 | Password | 开启 | 10 |
doratiger-recovery-password-repeat |
password_repeat |
确认新密码 | Password | 开启 | 20 |
两项初始值留空。回到恢复流程的阶段绑定,继续创建:
- Email 阶段:Name 填
doratiger-recovery-email,使用全局 SMTP,令牌有效期填minutes=30,Template 填email/password_reset.html,关闭 Activate user on success,绑定 Order20。 - Prompt 阶段:Name 填
doratiger-recovery-password-prompt,Fields 选择刚创建的两个密码输入,Validation Policies 选doratiger-password-policy,绑定 Order30。 - User Write 阶段:Name 填
doratiger-recovery-write,用户创建模式选 Never Create(禁止创建),绑定 Order40。它只更新已识别账号的密码。
最终阶段列表如下:
| 顺序 | 阶段 | 设置 |
|---|---|---|
| 10 | doratiger-recovery-identification |
上面的恢复专用识别阶段 |
| 20 | doratiger-recovery-email |
全局 SMTP;minutes=30;Activate user on success 关闭 |
| 30 | doratiger-recovery-password-prompt |
选择两个新密码输入;验证策略为 doratiger-password-policy |
| 40 | doratiger-recovery-write |
User Write;Never Create |
邮件模板使用原生 email/password_reset.html。
恢复阶段不应复用注册的邮件阶段:关闭 Activate user on success,才能避免找回密码顺带启用被管理员停用的账号。此设置不等于阻止停用账号收到邮件或改密码,它控制的是激活行为。Email Stage 文档
流程不添加 User Login。验证邮箱并改密后,让原生流程正常结束、清理状态,再回正常登录入口。此时新密码有效,MFA 设备仍需照常验证。
最后设置两处入口并分别保存:进入“系统 → 品牌”,编辑当前品牌,将 Recovery flow 选择为“DoraTiger 找回密码”;进入“流程和阶段 → 阶段”,编辑 doratiger-login-identification,把它的 Recovery flow 也选为同一个流程。前者设置站点恢复入口,后者在登录识别页提供找回密码链接。
测试时从登录页点击找回密码,填写测试账号,打开收到的邮件,提交两次新密码,再回登录页检查新密码有效、旧密码失效且 MFA 仍然生效。
5.2 登录后的主动改密
在流程列表创建“DoraTiger 修改密码”,Slug 填 doratiger-password-change,Title 填“修改你的密码”,Designation 选 Stage configuration,Authentication requirement 选 Require authenticated。
在输入列表创建两个专用字段,避免编辑恢复表单时连带改变这里的显示内容:
| Name | Field key | Label | Type | Required | Order |
|---|---|---|---|---|---|
doratiger-password-change-field-password |
password |
新密码 | Password | 开启 | 300 |
doratiger-password-change-field-password-repeat |
password_repeat |
确认新密码 | Password | 开启 | 301 |
初始值均留空。回到“DoraTiger 修改密码”的阶段绑定,创建 Prompt 阶段,Name 填 doratiger-password-change-prompt,Fields 选这两个输入,Validation Policies 选密码策略,绑定 Order 0;再创建 User Write 阶段,Name 填 doratiger-password-change-write,用户创建模式选 Never Create,绑定 Order 1。
| 顺序 | 阶段 | 设置 |
|---|---|---|
| 0 | doratiger-password-change-prompt |
两个密码输入;验证策略为 doratiger-password-policy |
| 1 | doratiger-password-change-write |
User Write;Never Create |
把 doratiger-login-password 的 Configure flow 改为该流程,用户凭据设置中的密码配置入口就会使用它。用户类型和创建组字段只针对新建用户,在 Never Create 模式下不会改变现有用户类型。
本次保留默认的已登录会话改密逻辑,没有另外要求旧密码或 MFA 再认证。若需要再次确认身份,应把相应验证阶段放在新密码表单之前,并单独测试;不能仅因登录流程启用了 MFA,就认为改密时又验证了一次。
六、个人资料、退出与应用授权
6.1 个人资料
在流程列表创建“DoraTiger 个人资料”,Slug 填 doratiger-user-settings,Title 填“修改个人资料”,Designation 选 Stage configuration,Authentication requirement 选 Require authenticated。
进入“流程和阶段 → 输入”,创建以下四个字段,Required 均开启。Name 由表中前缀和后缀拼接,例如用户名字段的完整名称为 doratiger-user-settings-field-username。Label 分别填写“用户名”“显示名称”“邮箱”“语言”:
名称后缀(前缀均为 doratiger-user-settings-field-) |
Field key | 类型 | 顺序 | 初始值表达式 |
|---|---|---|---|---|
| username | username |
Username | 200 | return user.username |
| name | name |
Text | 201 | return user.name |
email |
202 | return user.email |
||
| locale | attributes.settings.locale |
authentik: Locale | 203 | return user.attributes.get("settings", {}).get("locale", "") |
开启 Initial value expression,使表单显示当前资料。这里展示简写;实际导出的表达式还保留了读取失败时返回空字符串的处理。
进入“自定义 → 策略”创建 Expression Policy,Name 填 doratiger-user-settings-authorization。它负责检查用户是否有权修改这些资料字段。Expression 填入:
python1234567891011121314151617181920from authentik.core.models import ( USER_ATTRIBUTE_CHANGE_EMAIL, USER_ATTRIBUTE_CHANGE_NAME, USER_ATTRIBUTE_CHANGE_USERNAME, ) prompt_data = request.context.get("prompt_data") or {} attrs = request.user.group_attributes(request.http_request) tenant = request.http_request.tenant checks = [ ("email", USER_ATTRIBUTE_CHANGE_EMAIL, tenant.default_user_change_email), ("name", USER_ATTRIBUTE_CHANGE_NAME, tenant.default_user_change_name), ("username", USER_ATTRIBUTE_CHANGE_USERNAME, tenant.default_user_change_username), ] for field, flag, default in checks: if not attrs.get(flag, default): if prompt_data.get(field) != getattr(request.user, field): ak_message("没有修改该资料字段的权限。") return False return True
这是把原策略的三段相同判断合并后的等价示例;实际实例保留了原来的逐字段写法。规则优先读取用户组属性,没有覆盖时使用租户默认设置。
保存策略后,回到“DoraTiger 个人资料”的阶段绑定:
- 创建 Prompt 阶段,Name 填
doratiger-user-settings-prompt,Fields 选择四个资料输入,Validation Policies 选择doratiger-user-settings-authorization,绑定 Order20。 - 创建 User Write 阶段,Name 填
doratiger-user-settings-write,用户创建模式选 Never Create,绑定 Order100。 - 进入“系统 → 品牌”,编辑当前品牌,将 User settings flow 选为“DoraTiger 个人资料”,保存。
- 进入用户设置,检查四个字段是否显示当前值。用允许修改资料的测试账号提交修改,并在“目录 → 用户”核对保存结果;另用受限账号检查不允许修改的字段是否被拒绝。
当前保留默认的邮箱修改权限机制,没有增加“更换邮箱后重新验证邮件”。允许用户修改邮箱时,应将这个限制纳入后续配置,不能把注册时验证过邮箱当作永久证明。
6.2 退出
在流程列表创建“DoraTiger 退出登录”,Slug 填 doratiger-invalidation,Title 填“退出 DoraTiger”,Designation 选 Invalidation(失效/退出),Authentication requirement 选 None/No requirement。
进入阶段绑定,创建 User Logout(用户退出)阶段,Name 填 doratiger-invalidation-logout,Order 填 0。再编辑当前品牌,将 Invalidation flow 选为“DoraTiger 退出登录”。保存后用测试账号点击退出,确认再次访问需要登录的页面时会重新进入认证流程。
它负责 Authentik 会话退出。下游应用自己的 Cookie、协议单点退出和上游 Google/Microsoft 会话,仍有各自的生命周期。
6.3 显式授权与免确认授权
在流程列表分别创建以下两个流程,Designation 均选 Authorization(授权),Authentication requirement 均选 Require authenticated:
| Name | Slug | Title |
|---|---|---|
| DoraTiger 应用显式授权 | doratiger-provider-authorization-explicit-consent |
授权应用访问 |
| DoraTiger 应用免确认授权 | doratiger-provider-authorization-implicit-consent |
应用授权 |
打开“DoraTiger 应用显式授权”的阶段绑定,创建 Consent(同意授权)阶段,Name 填 doratiger-provider-authorization-consent,Mode 选 Expiring(有期限),Consent expire in 填 weeks=4,绑定 Order 0。
“DoraTiger 应用免确认授权”保存后保持阶段列表为空。接入应用时,进入“应用程序 → 提供者”,编辑相应 Provider,将 Authorization flow 选为其中一个流程。当前没有下游应用时可以先保留流程,不为测试这一引用随意修改其他提供者。
需要让用户确认应用将获得哪些身份信息时,选显式授权。自有可信应用可以按需要选择免确认授权;两者都不代替应用的访问策略。后续创建 Provider 时选择对应 Authorization flow,不能只创建流程而不关联提供者。
6.4 协议扩展入口
这些流程同样从“流程和阶段 → 流程”创建,但用途是给协议执行过程提供入口。按表格填写 Slug、Designation 和身份前提,Name 可依次填写“DoraTiger 应用退出”“DoraTiger 身份源预认证”“DoraTiger 访问申请”,Title 可使用对应中文用途。保存后保持阶段绑定为空。
| 流程 | Designation | 身份前提 | 当前阶段 |
|---|---|---|---|
doratiger-provider-invalidation |
Invalidation | None | 空,供应用退出协议调用 |
doratiger-source-pre-authentication |
Stage configuration | None | 空,身份源认证前的扩展入口 |
doratiger-request |
Stage configuration | Require authenticated | 空,访问申请服务会追加运行时处理 |
编辑当前品牌,将 Request flow 选为“DoraTiger 访问申请”。应用退出流程在对应 Provider 的 Invalidation flow 中选择;身份源预认证流程在需要该入口的 Source 中选择,当前没有使用者时保留为空流程即可,不需要临时添加阶段来执行它。本版本的访问申请属于 Enterprise Preview;仅建这个流程,不会自动创建申请规则、审核人或应用授权关系。访问申请文档
这些入口本轮保留原生行为,没有为了让流程图看起来完整而添加用户登录、写入或退出阶段。目前还没有通过实际下游应用完成它们的集成测试。
七、默认配置迁移与清理
7.1 入口与引用迁移
阶段和策略可以被多个流程复用,删除前从对象的 Used by、阶段绑定、Prompt 验证策略和 Configure flow 分别检查。下面是本地流程的主要入口:
| 配置位置 | 自建流程 |
|---|---|
| Brand Authentication flow | doratiger-authentication |
| Brand Recovery flow | doratiger-password-recovery |
| Brand User settings flow | doratiger-user-settings |
| Brand Invalidation flow | doratiger-invalidation |
| Brand Request flow | doratiger-request |
| 登录识别阶段 Recovery flow | doratiger-password-recovery |
| 登录识别阶段 Passwordless flow | doratiger-passkey-authentication |
| 密码阶段 Configure flow | doratiger-password-change |
| 三个认证器设置阶段 Configure flow | 各自的 TOTP、恢复码、WebAuthn 设置流程 |
实际替换时,进入表格第一列对应的编辑页面,从下拉框选择已创建的中文流程名称,保存后重新打开确认。认证器的 Configure flow 要分别编辑三个设置阶段,不能只修改品牌。已有 Provider 或 Source 也要逐个检查其流程字段,品牌不会替它们改引用。
登录页 Enrollment flow 保持为空;邀请注册链接由管理员提供。直接访问注册流程仍需邀请阶段校验,隐藏按钮只是界面设置。
如果已经接入外部身份源、邀请应用或通知规则,还需要检查它们的引用。对应功能尚未迁移时,保留仍在使用的默认对象。
7.2 默认蓝图停用
先备份数据库和配置,导出旧流程,再在“自定义 → 蓝图”关闭 Enabled。按替代进度停用:
| 自建功能已经验证后 | 停用的默认蓝图 |
|---|---|
| 本地登录 | Default - Authentication flow |
| 三个 MFA 设置入口 | Default - TOTP MFA setup flow、Static MFA setup flow、WebAuthn MFA setup flow |
| 主动改密和个人资料 | Default - Password change flow、User settings flow |
| Authentik 退出 | Default - Invalidation flow |
| 应用授权及退出 | 两个 Provider authorization flow、Provider invalidation flow |
| 身份源预认证和访问申请 | Default - Source pre-authentication flow、Request flow |
| 所有品牌默认入口已迁移 | Default - Brand |
| Source 迁移完成 | Default - Source authentication flow、Source enrollment flow |
| 通知迁移完成 | Default - Events Transport & Rules |
操作时按名称找到目标蓝图,打开编辑,将 Enabled 关闭并保存;回到列表确认停用状态。每完成一组替代并验证后,再停用这一组对应的蓝图。停用蓝图和删除它以前创建的流程是两个独立操作。
OOBE 蓝图在首次初始化后已经停用,保持停用。停用不会删除已创建对象;保留停用的蓝图实例,也方便以后辨认官方配方和自建配置。
7.3 默认对象清理
在确认没有入口引用后,依次删除旧流程及阶段绑定、无其他引用的旧阶段、无其他引用的输入和策略。不要看到名称带 default 就全选删除。
默认改密的密码策略被 doratiger-password-policy 替代;默认用户设置权限策略要先复制到自建策略,再删除原对象。默认 OOBE 的三个策略、五个输入和专属阶段,可以在初始化完成后整体清理。共享的默认写入或登录阶段,要等其他默认流程也迁移完才能删除。
在流程列表勾选已经替代的默认流程,使用删除操作并检查确认页面列出的关联对象。随后进入阶段、输入和策略列表,逐类清理专属对象。若确认页面包含仍需保留的自建对象,先取消删除并修正引用;存在共享引用的阶段不要随旧流程一起处理。删除后重新检查品牌、凭据设置和各 Provider/Source 的下拉框,确认没有缺失引用。
保留 System 映射与 Scopes、Bootstrap、RBAC 等系统蓝图。它们提供协议属性或权限对象,不属于本文要重建的交互流程。旧输入迁移蓝图按固定名称清理历史对象,不会匹配当前 doratiger- 输入。
八、配置验证
8.1 流程检查器与事件日志
配置保存后,先在流程详情查看阶段绑定顺序。需要定位执行过程时,可在详情页的 Execute flow 区域点击 Use inspector(使用检查器),观察 Next stage、Plan history 和 Current plan context。Flow Inspector 文档

图为官方的改密流程示例,右侧显示下一阶段及执行历史,不是本文实例的测试截图。检查器会真实执行流程,User Write 仍会写入数据;上下文还可能显示密码,应使用测试账号,不公开未经脱敏的上下文截图。
再进入“事件 → 日志”,按测试时间和测试用户查找登录、失败或其他相关记录,打开详情核对事件动作、用户和上下文。事件由操作产生,不需要额外建一个“登录事件”并绑定到流程。日志中有错误时,再结合检查器判断停在哪个阶段;不是每一个表单步骤都会对应一条独立事件。
通知规则和通知传输用于把选定事件发给接收者,与流程的 Stage Bindings 是不同配置。本篇验证流程执行结果时不需要新增邮件通知规则,也不要直接删除仍在工作的通知配置。
8.2 功能验证记录
按功能逐项检查,避免只看登录首页能否打开:
| 检查 | 本次结果 |
|---|---|
| 本地密码登录、TOTP、恢复码、WebAuthn | 实际使用测试通过 |
| 独立 Passkey 登录 | 已配置并完成登录测试 |
| 邀请注册、指定邮箱验证、MFA 配置 | 实际注册测试通过 |
| 找回密码后新密码登录,继续要求 MFA | 实际测试通过 |
| 个人资料入口 | 临时认证会话能正常显示表单 |
| 主动改密 | 临时账号测试:弱密码及不一致密码被拒绝,新密码有效、旧密码失效 |
| 退出 | 临时认证会话被清除 |
| 下游应用授权、协议退出、访问申请 | 保留原生配置,尚未完成实际应用集成测试 |
服务端验证使用临时账号和事务回滚,没有修改管理员密码,也没有留下测试账号。登录、找回密码以及通知需要的既有自建配置保持不变。
判断是否完成迁移,应看实际入口、绑定和策略引用,不能只统计流程数量或检查名称前缀。
九、配置问题与解答
9.1 登录流程未切换
Q:品牌已经选择自建认证流程,为什么浏览器仍显示默认登录页?
A: 检查当前域名匹配的 Brand,以及它的 Authentication flow。浏览器如果仍停在旧流程 URL,刷新只会继续访问旧流程,需要重新从站点首页进入。默认流程删除后,旧标签页也应从站点入口重新打开,无需重建同名默认流程。
9.2 Configure flow 的引用关系
Q:认证器设置阶段为什么又指回包含自己的流程,会不会递归执行?
A: 流程的阶段绑定决定进入流程后执行哪些步骤;阶段的 Configure flow 则决定用户在凭据页点击配置时打开哪个流程。两者用途不同,Configure flow 不是执行完阶段后再次跳转的指令。
9.3 凭据设置入口重复
Q:为什么 MFA 设备页面同时出现默认英文入口和自建入口?
A: 默认认证器设置阶段及其 Configure flow 仍然存在。新建自定义阶段不会自动替换旧对象,改名也不会合并入口。核对引用、测试自建入口后,再按清理顺序删除不再使用的默认设置阶段和流程。
9.4 Passkey 登录入口缺失
Q:WebAuthn 凭据已经注册,为什么登录页没有 Passkey 入口?
A: WebAuthn 设置流程负责注册凭据,独立无密码流程负责验证凭据并建立会话。还需要在当前登录识别阶段的 Passwordless flow 中选择 doratiger-passkey-authentication,登录页才有对应入口。
9.5 邀请注册提交后停留在表单
Q:输入用户名和密码后点击“继续”,为什么没有进入邮箱验证或 MFA?
A: 本次遇到的问题来自邀请邮箱策略读取上下文的方式。2026.8.5 的 Prompt 验证策略可以直接读取 prompt_data,但没有同样直接提供 flow_plan。改为通过 SESSION_KEY_PLAN 从当前 HTTP 会话取得执行计划,再读取邀请数据后,测试通过。正文给出的是修正后的策略;策略测试器没有真实邀请会话,仍需使用邀请链接验证。
9.6 邀请管理入口不可见
Q:创建邀请阶段后,为什么后台没有“邀请”菜单,或手工打开地址提示 URL 不存在?
A: 创建 Invitation Stage 后刷新后台,再进入“目录 → 邀请”。本版本实际路由是 /if/admin/#/flow/stages/invitations,不是 /if/admin/#/directory/invitations。
9.7 注册中断后的邀请与用户状态
Q:没有完成注册,为什么邀请已经不能使用,或者邮箱已有用户记录?
A: 当前版本的单次邀请在通过邀请阶段时就可能被消耗,不会一直保留到整个注册成功。用户写入阶段又在邮箱验证之前执行,因此中断后可能留下未激活用户。重试前应检查邀请和该邮箱的用户记录,再决定如何恢复,不要反复创建邀请或重复账号。
9.8 默认策略的引用检查
Q:普通策略绑定列表没有引用,是否就可以删除默认策略?
A: 还需要检查 Prompt Stage 的 Validation Policies。密码强度和用户资料权限策略可能直接被输入阶段引用,不一定出现在普通 Policy Binding 列表中。应先替换这些引用,再删除旧策略。
9.9 未绑定阶段的清理
Q:对象都使用 doratiger- 前缀,是否就表示清理完成?
A: 命名前缀不能说明对象是否仍在使用。本次排障曾留下未绑定的 doratiger-invitation-finish 阶段,它不参与执行,新部署无需创建。应结合入口、阶段绑定和策略引用检查残留对象。
参考
支付宝
微信