ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表