authentik 多语言单仓库开发指南:架构布局、Makefile 工作流与生成式 API 客户端

发布时间:2026/9/12 2:39:35

authentik 多语言单仓库开发指南:架构布局、Makefile 工作流与生成式 API 客户端 authentik 多语言单仓库开发指南架构布局、Makefile 工作流与生成式 API 客户端【免费下载链接】authentikThe authentication glue you need.项目地址: https://gitcode.com/GitHub_Trending/au/authentik导读本文以 authentik 仓库根目录的 AGENTS.md 为核心系统讲解这个开源 Identity ProviderIdP单仓库的完整结构Python/Django 核心、Go 实现的 outpost、Rust 原生组件与 TypeScript 前端如何在同一仓库内协作以及开发者如何借助 Makefile 命令中心完成环境搭建、开发调试、测试与代码生成。读完本文你将掌握 authentik 的目录导航方法、REST API 生成式客户端的正确使用约束、Blueprints 声明式配置的定位以及改动落在哪个子树、下一步该做什么的完整决策路径。项目定位与命名规范authentik 是一个开源的身份提供商IdP面向现代 SSO 场景支持SAML、OAuth2/OIDC、LDAP、RADIUS 和 SCIM等协议设计目标是既能跑在家用实验室homelab环境也能支撑大规模生产集群。其背后公司为 Authentik Security, Inc.。一个贯穿全仓库的硬性规范是产品名永远使用小写authentik即使出现在句首也是如此见 AGENTS.md 的 Conventions 一节。这条规则约束代码注释、文档和 commit message 等所有场景仓库内任何地方都不应出现Authentik这种写法。多语言单仓库的总体布局authentik 是一个典型的 polyglot monorepo多语言单仓库。绝大多数改动会落在以下某个子树中每个子树可能还有更深入的分支指南动手前应先阅读语言位置职责深入指南Pythonauthentik/、lifecycle/核心服务器——一个 Django Django REST Framework 应用是 IdP 的事实来源source of truth—Gocmd/、internal/OutpostsLDAP、RAC、RADIUS—Rustsrc/、packages/ak-*较新的 server/worker/proxy outpost 组件与共享 crateak-axum、ak-common、ak-guardian—TypeScriptweb/Web UI——三个基于 Lit PatternFly 的应用Admin、User、Flowweb/AGENTS.md文档website/文档、集成指南与 API 站点Docusauruswebsite/AGENTS.mdPython 核心与 Web UI 之间通过生成的 OpenAPI 客户端通信任何方向都不允许手写 HTTP 调用详见后文API schema 与生成式客户端一节。从仓库根目录已通过list_files验证可以直观看到这份布局authentik/ # Django 核心——IdP 本体 lifecycle/ # 启动/运行时迁移、gunicorn 配置、ak CLI、容器与 AWS 入口 cmd/ # Go 入口ldap/ rac/ radius/ outposts internal/ # 共享 Go 代码outpost 实现、配置 src/ # Rust server/worker基于 ak-axum由 cargo features 门控 packages/ # 共享工作区包多语言 # client-go / client-rust / client-ts —— 生成的 API 客户端禁止手改 # ak-axum / ak-common / ak-guardian —— Rust crates # django-* —— 可复用的 Django 应用channels、dramatiq、cache # eslint-config / prettier-config / tsconfig / theme / docusaurus-config —— 共享 JS 配置 web/ # TypeScript Web UI有自己的 AGENTS.md website/ # 文档 / 集成 / API 站点有自己的 AGENTS.md blueprints/ # YAML 声明式配置default/ system/ example/启动时应用 locale/ # 后端翻译.po cspell 词典覆盖en/dictionaries/ tests/ # 跨切面测试支持e2e/、integration/、geoip/、openid_conformance/ schemas/ # 第三方 XSD/JSON schemaSAML、WS-*、SCIM运行时使用 scripts/ # 仓库自动化schema 构建、compose 生成、node 设置、semver schema.yml # 生成的 OpenAPI schema——核心与每个客户端之间的契约 Makefile # 命令中心——几乎所有操作都是 make target manage.py # Django 管理入口 pyproject.toml # Python 依赖 工具配置uv、black、ruff、mypy、bandit Cargo.toml # Rust workspace 清单 go.mod # Go modulemodule path: goauthentik.io顶层关键文件的佐证pyproject.toml 确认了 Python 侧依赖requires-python 3.14.*Django5.2.17、Django REST Framework、drf-spectacular0.29.0OpenAPI schema 生成、django-tenants3.13.0多租户、channels4.3.2ASGI。go.mod 声明module goauthentik.io依赖go-ldap、guac、radius-eap等对应 Go outpost 的 LDAP/RAC/RADIUS 协议实现。Cargo.toml 的 Rust workspace 包含ak-axum、ak-common、client-rust采用 2024 edition与 AGENTS.md 中Rust 原生组件基于 axum的描述一致。仓库当前版本为2026.11.0-rc1见于 pyproject.toml 与 Cargo.toml 的version字段。authentik Django 核心包authentik/authentik/被拆分为职责聚焦的 Django 应用是 IdP 业务逻辑的所在地最值得记住的地标包括core/— 用户、应用、令牌其他一切模型所挂靠的中心。flows/stages/— 流程引擎登录/注册/恢复编排以及它执行的各个 stage与 Web 端flow/应用对应。policies/— 策略引擎用于门控流程、应用和来源。sources/— 入站身份LDAP、OAuth、SAML、SCIM、Kerberos source。providers/— authentik 对外暴露的出站协议SAML、OAuth2/OIDC、Proxy、LDAP、RADIUS、SCIM、RAC。outposts/— 对 Go outposts 的管理与协调。brands/tenants/— 品牌/主题与多租户基于django-tenants。blueprints/— 应用顶层blueprints/目录下 YAML 的引擎。rbac/、crypto/、events/审计日志、enterprise/EE 许可功能、api/、admin/REST 面、root/Django 工程settings、URLs、ASGI/WSGI。这些子包在实际环境详情中都有完整的代码子树例如authentik/providers/oauth2/下有 106 个 Python 文件、authentik/stages/authenticator_webauthn/含 36 个 Python 文件读者可以直接在仓库中逐个深入。改动决策表去哪里改、下一步做什么AGENTS.md 给出了一张非常实用的改动落点表是新手在单仓库中定位改动位置的捷径你想做什么去这里然后增改 REST endpoint、模型字段或 serializerauthentik/Pythonmake gen刷新schema.yml与客户端并提交生成的迁移改变 UI 行为、某个流程界面或管理页web/web/AGENTS.md——只能通过goauthentik/api调用 API编写或修改文档、集成指南或术语条目website/website/AGENTS.md然后make docs/make integrations修改 outpostLDAP、proxy、RAC、RADIUS或前端代理cmd/internal/Gomake go-test修改原生 server/worker 组件或共享 cratesrc/packages/ak-*Rustmake rust-test种子化或调和受管对象flow、stage、policy、brandblueprints/YAML优先用 blueprint而不是临时数据迁移修改启动、迁移接线、akCLI 或容器入口lifecycle/make run确认服务器仍能启动跨越多个行的改动通常需要不止一个 PR——参见下文 Conventions 中按 CODEOWNERS 拆分 PR 的约定。从实际 CODEOWNERS 文件可以看到authentik/、cmd/、internal/、src/、lifecycle/归goauthentik/backendweb/归goauthentik/frontendwebsite/归goauthentik/docsMakefile与容器相关路径归goauthentik/infrastructure这与决策表的分工完全对应。Makefile 命令中心从搭建到发布AGENTS.md 明确强调仓库根目录的 Makefile 是命令中心运行make help可查看带注释的完整目标列表。Makefile 目标会正确接线四种语言的工作目录、工具链和顺序因此优先使用 make target而不是直接调用uv/cargo/go/npm。Python 运行在uv之下开发服务器以ak allinone形式运行。以下命令均已在 Makefile 中验证存在。环境搭建Setupmake install # 安装一切node web core/Python最先运行 make gen-dev-config # 生成本地开发配置文件 make dev-reset # 删除并重建 Postgres 数据库迁移到全新安装状态make install实际依次执行node-installpnpm--frozen-lockfile、web-install、core-installuv sync --frozen。make dev-reset由dev-drop-db、dev-create-db、migrate串联而成其中数据库连接参数user/host/name由python -m authentik.lib.config从配置中动态读取。运行Runmake run # 运行 authentik 服务器 workeruv run ak allinone make run-watch # 同上但监听 .py/.rs/.go 变更自动重载需要 watchexec make migrate # 应用 Django 迁移ak命令的实际入口是 lifecycle/ak 这个 bash 引导脚本它会等待数据库就绪、处理 Docker socket 权限然后根据子命令分发到authentikRust 二进制或cargo run/python -m manage。测试Testmake test # Python/Django 测试 覆盖率可追加路径缩小范围make test authentik/providers/saml make go-test # Go 测试race cover make rust-test # Rust 测试cargo nextest make web-test # Web UI 测试委托给 web/对应 Makefile 实现go-test为go test -timeout 0 -v -race -cover ./...rust-test为cargo nextest run --workspacetest走coverage run manage.py test --keepdb并输出 HTML 覆盖率报告。静态检查与格式化Lint Formatmake lint-fix # 自动修复black ruffPython与 rustfmtRust make lint # 检查bandit、mypy --strict、golangci-lint、cargo deny/machete make lint-spellcheck # 全仓库 cspell仅拼写错误模式 make lint-catalogs # pnpm catalog 版本钉死在 root/web/website 工作区之间保持一致CI 将这些镜像为ci-lint-*/ci-test目标如ci-lint-mypy运行mypy --strict、ci-lint-bandit运行 bandit、ci-lint-pending-migrations用ak makemigrations --check防止未提交的模型迁移。推送前先运行对应的make lint/make testCI 会执行相同的检查。API schema 与生成式客户端契约而非手写代码REST API 是 Django 核心与一切其他组件之间的契约而它的核心原则是**生成而非手写generated, not authored**从运行中的 Django 应用提取 OpenAPI schema写入schema.ymlmake gen-build。从该 schema 生成类型化客户端写入packages/client-{go,rust,ts}make gen-clients。make gen同时完成以上两步。TypeScript 客户端以goauthentik/api形式发布进 Web 构建。由此产生三条硬性约束绝不手改schema.yml或packages/client-*下的任何内容——应该改 Python API然后重新生成。在 Web UI 中只能通过goauthentik/api调用 API——禁止fetch、禁止 Axios详见 web/AGENTS.md 中的 NEVER call the authentik API in a different way…。修改 serializer/viewset 后运行make gen让 schema 与客户端保持同步CI 的ci-lint-pending-migrations同样守护未提交的模型迁移。仓库证据Makefile 中gen-build在AUTHENTIK_DEBUGtrue、AUTHENTIK_TENANTS__ENABLEDtrue等环境变量下执行ak build_schemagen-clients会并行构建 Go、Rust、TS 三套客户端。schema.yml位于仓库根目录packages/client-ts/下有近千个生成的 TypeScript 文件均可直接查阅。Blueprints声明式 YAML 配置blueprints/存放声明式 YAMLauthentik 在启动时应用它们来种子化和调和对象flows、stages、policies、默认品牌。目录分工已通过list_files验证default/与system/— 内置初始配置example/— 参考示例testing/— 支撑测试migrations/— 迁移类 blueprintschema.json— blueprint 的 JSON schema 校验定义。关键原则当结果应该是受管、幂等的对象时优先通过 blueprint 改变系统而不是临时的数据迁移。以 blueprints/default/flow-default-authentication-flow.yaml 为例可以看到 blueprint 的典型写法顶层version: 1与metadata.nameentries列表里用model字段声明目标 Django 模型如authentik_flows.flow、authentik_stages_identification.identificationstage用identifiers定位对象用attrs声明属性并支持!Find、!KeyOf等引用指令来把多个 stage 绑定到流程authentik_flows.flowstagebinding上。工程约定ConventionsAGENTS.md 明确了几条仓库级约定值得在参与开发前牢记产品名永远小写authentik适用于代码注释、文档与 commit message。提交署名不要在 commit 中添加 Claude 的 co-author trailer应把功劳记在人类协作者身上。CODEOWNERS将子树映射到团队见上文及 CODEOWNERS 的实际内容。跨越多个团队区域的改动优先按团队拆成多个 PR启用/接线类改动最后合入。翻译locale/与 Web locales 是提取出来的不手工编辑——见make i18n-extract。当你改变了某个被文档化的流程命令、路径、约定时同时更新本文件与相关的子AGENTS.md/ 开发者文档避免它们漂移。技术栈总览AGENTS.md 汇总了各关注点的技术选型其中可被仓库文件佐证的要点如下关注点技术选型仓库佐证核心服务器Python 3.14、Django 5.2 DRF、ChannelsASGIpyproject.toml 的requires-python与依赖锁定后台任务DramatiqPostgres brokerdjango-dramatiq-postgres位于 packages 与 pyproject 依赖数据存储PostgreSQL经django-tenants多租户django-tenants3.13.0OutpostsGogoauthentik.iomodule— LDAP、proxy、RAC、RADIUSgo.mod 的module goauthentik.io原生服务Rust2024 editionaxum— server/worker 组件 共享 crateCargo.toml 的 workspace 成员与edition 2024Web UITypeScript、Lit 3、PatternFly 4web/AGENTS.md文档Docusaurus 3website 目录结构APIOpenAPIdrf-spectacular→ 生成 Go/Rust/TS 客户端Makefile 的gen-build/gen-clientsPython 工具链uv、black、ruff、mypy--strict、banditpyproject.toml 与 Makefile 的ci-lint-*构建中枢GNU Make 各语言工具链MakefileCI / 托管GitHub ActionsDocker 镜像 Helm chart 分发lifecycle/container/ 下的 Dockerfile开发者文档指引权威的贡献者文档位于website/docs/developer-docs/下该目录已确认存在其中值得优先阅读的入口包括setup/full-dev-environment.mdx— 完整后端 前端开发环境setup/frontend-dev-environment.mdx— 仅 Web 的搭建setup/debugging.mdx— 附加调试器含 VS Code 配置docs/style-guide.mdx— 规范的行文风格指南同样约束本仓库的文档contributing.mdx与顶层 CONTRIBUTING.md — 贡献流程SECURITY.md — 漏洞上报方式。小结一份可执行的单仓库开发手册总结而言AGENTS.md 本质上是 authentik 单仓库的开发者作战地图它用三张表语言/子树、改动落点、技术栈回答了仓库里有什么、我要改哪里、用什么工具链三个核心问题再用 API 生成链路与 Blueprints 两条规则守住架构底线——契约只由核心生成、配置只走声明式蓝图。对希望深入这套四语言协作体系的读者按make install→make gen-dev-config→make run的顺序起步再依据改动决策表定位首个任务是最平滑的路径。【免费下载链接】authentikThe authentication glue you need.项目地址: https://gitcode.com/GitHub_Trending/au/authentik创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 2:34:35

三步跑通大模型推理加速:TensorRT-LLM 实战指南

三步跑通大模型推理加速:TensorRT-LLM 实战指南 【免费下载链接】TensorRT-LLM TensorRT LLM provides users with an easy-to-use Python API to define Large Language Models (LLMs) and supports state-of-the-art optimizations to perform inference efficien…

2026/9/12 3:14:39

光伏充电站V2G技术优化与动态电价策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 3:14:39

2026项目管理软件测评:10款工具选型指南与避坑建议

选项目管理软件这事,我算是把市面上叫得上名字的工具几乎都折腾过一轮。之前团队从几个人扩张到上百人,中间换过三次工具,每一次切换都伴随着数据迁移的折腾、成员习惯的重建以及各种“早知道当初就选对”的后悔。所以当有人问我“2026年了&a…

2026/9/12 3:14:39

日期时间数据处理全攻略:从Excel到SQL再到Pandas

做数据分析这些年,我越来越觉得“日期时间数据”是个被严重低估的数据类型。很多人做数据分析项目时,一开始关注的是销售额、用户量、转化率这些指标数字,却忽略了背后真正撑起分析框架的时间字段。等到做同环比、留存、漏斗、生命周期分析的…

2026/9/12 3:09:39

尼帕病毒:特征、检测与防控策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码