ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Authelia authelia-gen 工具链解析:`docs json-schema exports webauthn` 命令与 WebAuthn 导出 JSON Schema 生成原理

Authelia authelia-gen 工具链解析:`docs json-schema exports webauthn` 命令与 WebAuthn 导出 JSON Schema 生成原理 Authelia authelia-gen 工具链解析docs json-schema exports webauthn命令与 WebAuthn 导出 JSON Schema 生成原理【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/autheliaAuthelia 的单点登录门户在运行时依赖 WebAuthnFIDO2/Passkey凭据进行无密码与多因素认证而authelia-gen是 Authelia 仓库自带的文档/代码生成工具链。本文聚焦其中的authelia-gen docs json-schema exports webauthn子命令说明它如何根据 Go 结构体反射生成 WebAuthn 导出数据的 JSON Schema、可用的命令行选项以及生成产物在docs/static/schemas下的版本化组织方式。读完本文你将掌握该命令的完整用法、其底层生成流水线结构体 → JSON Schema 的映射逻辑并能读懂exports.webauthn.json中每一个字段的业务含义。命令定位文档工具链中的叶子节点authelia-gen是 Authelia 仓库根目录下cmd/authelia-gen/中的 Go 程序入口见 cmd/authelia-gen/main.go它把文档、代码、贡献者名单、发布信息等多种生成任务统一收敛到一组 Cobra 命令树中。docs json-schema exports webauthn位于该命令树的叶子位置完整调用链为authelia-gen docs json-schema exports webauthn其职责一句话概括与文档一致Generate docs JSON schema for the WebAuthn exports即为 WebAuthn 导出文件生成文档用 JSON Schema。在命令树中它的父级依次为authelia-gen docs—— 生成各类文档authelia-gen docs json-schema—— 生成各类 JSON Schema见 authelia-gen_docs_json-schema.md其下还挂有configuration配置 Schema、user-database用户数据库 Schema两个平级子命令authelia-gen docs json-schema exports—— 为各类导出文件生成 Schema其下共有三个导出子命令见 authelia-gen_docs_json-schema_exports.mdexports totp—— TOTP 配置导出exports webauthn—— WebAuthn 凭据导出本文主题exports identifiers—— 用户不透明标识符导出。命令语法与选项该子命令的使用语法为authelia-gen docs json-schema exports webauthn [flags]专属 Options本命令自身只有一对帮助选项-h, --help help for webauthn继承自父命令的 Options由于 Cobra 命令树逐级合并父级标志以下选项均可直接作用于本命令。其中大部分与生成器行为和仓库目录布局相关理解它们有助于把生成器指向自定义的仓库副本或控制输出版本选项类型/默认值说明-C, --cwd string无默认为 git 命令设置当前工作目录CWD--dir.authentication stringinternal/authentication认证目录相对仓库根--dir.docs stringdocs文档目录--dir.docs.adr stringreference/architecture-decision-logADR 数据目录--dir.docs.cli-reference stringreference/cliCLI 参考 Markdown 的存放目录--dir.docs.content stringcontent文档内容目录--dir.docs.data stringdata文档数据目录--dir.docs.static stringstatic文档静态文件目录--dir.docs.static.json-schemas stringschemas文档静态 JSON Schema 文件目录--dir.locales stringinternal/server/locales本地化i18n目录-d, --dir.root string./仓库根目录--dir.schema stringinternal/configuration/schemaSchema 目录用于提取 Go 注释--dir.web stringwebWeb 前端目录-X, --exclude strings无默认设置被排除的生成器名称--file.bug-report string.github/ISSUE_TEMPLATE/bug-report.ymlbug 报告 issue 模板路径--file.commit-lint-config stringcommitlint.config.mjscommitlint 配置文件路径--file.configuration-keys stringinternal/configuration/schema/keys.go配置键文件路径--file.docs-commit-msg-guidelines stringdocs/content/contributing/guidelines/commit-message.mdcommit message 规范文档路径--file.docs.data.keys stringconfigkeys.json文档 keys 数据文件路径--file.docs.data.languages stringlanguages.json文档语言数据文件路径--file.docs.data.misc stringmisc.json文档 misc 数据文件路径--file.docs.static.json-schemas.configuration stringconfiguration配置 JSON Schema 输出文件名--file.docs.static.json-schemas.exports.identifiers stringexports.identifiersidentifiers 导出 JSON Schema 输出文件名--file.docs.static.json-schemas.exports.totp stringexports.totpTOTP 导出 JSON Schema 输出文件名--file.docs.static.json-schemas.exports.webauthn stringexports.webauthnWebAuthn 导出 JSON Schema 输出文件名本命令核心--file.docs.static.json-schemas.user-database stringuser-database用户数据库 JSON Schema 输出文件名--file.feature-request string.github/ISSUE_TEMPLATE/feature-request.ymlfeature request issue 模板路径--file.scripts.gen stringcmd/authelia-scripts/cmd/gen.goauthelia-scripts gen 文件路径--file.server.generated stringinternal/server/gen.goserver 生成文件路径--file.web.i18n stringsrc/i18n/index.tsWeb 前端 i18n 配置路径--file.web.package stringpackage.jsonWeb 前端 node 包配置路径--latest布尔启用 latest 功能如 JSON Schema 生成器的 latest 输出--next布尔启用 next 功能与current互斥--package.configuration.keys stringschemakeys 文件的 Go 包名--package.scripts.gen stringcmdauthelia-scripts gen 文件的 Go 包名--version-count int5输出模板中最多列出的次要版本数量--versions strings无默认指定生成器运行的版本特殊值current与next互斥其中与本文命令最直接相关的两个选项是--file.docs.static.json-schemas.exports.webauthn决定输出文件的基本名默认exports.webauthn最终产物为版本/json-schema/exports.webauthn.json--versions/--latest/--next决定按哪些版本目录输出 Schema见下文版本化输出一节。命令实现Go 结构体如何变成 JSON Schema该命令的实际执行逻辑位于 cmd/authelia-gen/cmd_docs_jsonschema.go命令注册newDocsJSONSchemaExportsWebAuthnCmd()定义Use: webauthn、Short描述并绑定RunE: docsJSONSchemaExportsWebAuthnRunE执行入口docsJSONSchemaExportsWebAuthnRunE依次完成读取当前版本号readVersion解析--dir.schema指向的源码目录通过getJSONSchemaOutputPath组合输出目录docs/static/schemas与输出文件名exports.webauthn调用通用生成器docsJSONSchemaGenerateRunE并将待反射的目标结构体model.WebAuthnCredentialDataExport{}传入。通用生成器docsJSONSchemaGenerateRunE使用github.com/authelia/jsonschema的Reflector开启RequiredFromJSONSchemaTags并从internal/configuration/schema等目录加载 Go 源码注释AddGoComments使生成 Schema 的description/title直接取自代码注释调用r.Reflect(v)反射目标结构体得到内存中的 Schema依据--versions默认latest与current循环调用writeJSONSchema按dir/version/json-schema/file.json写出带 2 空格缩进的 JSON。也就是说这个命令并不是凭空写死一份 JSON而是以仓库内 Go 类型定义为准的反射式生成。只要模型字段或注释发生变化重新执行命令即可同步更新文档站点使用的 Schema 文件避免手写两处而失步。生成产物解读exports.webauthn.json字段全解命令生成的产物已提交在仓库中当前版本为 docs/static/schemas/latest/json-schema/exports.webauthn.json。该文件遵循 JSON Schema 2020-12https://json-schema.org/draft/2020-12/schema根节点通过$ref指向#/$defs/WebAuthnCredentialDataExport并声明additionalProperties: false即不允许出现未定义字段用于严格校验导入文件。顶层结构WebAuthnCredentialDataExport{ webauthn_credentials: [ ... ] }只有一个属性webauthn_credentials类型为数组元素为WebAuthnCredentialData描述为The list of WebAuthn credentials.。对应的 Go 定义见 internal/model/webauthn.gotype WebAuthnCredentialDataExport struct { WebAuthnCredentials []WebAuthnCredentialData yaml:webauthn_credentials json:webauthn_credentials jsonschema:titleWebAuthn Credentials jsonschema_description:The list of WebAuthn credentials. }注意jsonschema/jsonschema_description标签正是 Schema 中title与description的来源印证了上文反射自代码标签的实现事实。元素结构WebAuthnCredentialData 全部字段每个数组元素描述一条 WebAuthn 凭据记录字段含义如下字段类型含义取自 Schema 描述idinteger数据库自增主键created_atstring (date-time)该凭据的创建时间last_used_atstring (date-time)该凭据最后一次被使用的时间rpidstring注册该凭据所用的 Relying Party IDusernamestring该凭据所属用户的用户名descriptionstring用户对该凭据的描述如设备别名kidstring该凭据的公钥 IDKey IDaaguidstring认证器证明全局唯一标识符Authenticator Attestation Global Unique Identifierattestation_typestring该凭据使用的证明类型attestation typeattestation_formatstring该凭据使用的证明格式attestation formatattachmentstring最近记录的凭据附着类型如 cross-platform / platformtransportsarray[string]最近记录的凭据传输方式列表如 usb、nfc、ble、internalsign_countinteger最近记录的凭据签名计数器用于防克隆检测clone_warningboolean凭据的克隆警告状态legacybooleanlegacy 值表示该凭据可能需要重新注册discoverableboolean凭据是否可发现resident key / passkeypresentboolean用户在场user presence状态verifiedboolean用户验证user verification状态backup_eligibleboolean凭据是否具备备份资格backup eligiblebackup_stateboolean凭据当前的备份状态public_keystring凭据公钥导出时为 Base64 编码的字符串attestationstring用于审计与验证的凭据证明信息其中public_key与attestation在导入还原时会做 Base64 解码回原始字节见 internal/model/webauthn.gokid同样按 Base64 解码后包装为NewBase64类型aaguid则被解析为 UUIDinternal/model/webauthn.go。sign_count、clone_warning、present、verified等字段共同服务于 WebAuthn 的安全属性防克隆、防重放在导出-导入跨实例迁移时用于完整保留凭据的认证状态。版本化输出latest、current、next 与历史版本目录从源码docsJSONSchemaGenerateRunE与writeJSONSchema的实现可以看出输出目录结构为schema-dir/version/json-schema/file.json未指定--versions时默认同时生成latest与current两个版本current对应vmajor.minor即当前发布版本next对应vmajor.minor1且二者互斥同时传入会直接报错meta version next and current are mutually exclusivelatest指向当前最新发布版本目录若同时启用了--nextlatest的$id会指向下一个版本号也可通过--versions显式传入任意形如v4.38的历史版本此时 Schema 的$id仍指向当前版本但文件会被写入对应历史版本目录。仓库中已提交的产物目录为 docs/static/schemas/latest/json-schema、docs/static/schemas/v4.38/与docs/static/schemas/v4.39/其中均包含exports.webauthn.json。每个产物文件还带有一个同名的.license文件REUSE 合规标注Apache-2.0。Schema 的$id使用统一格式https://www.authelia.com/schemas/v4.39/json-schema/exports.webauthn.json格式常量model.FormatJSONSchemaIdentifier使得文档站点与外部工具可以通过固定 URL 引用特定版本的 Schema。实际应用谁在消费这份 Schemaexports.webauthn.json的典型消费场景包括导入文件校验Authelia 支持将导出的 WebAuthn 凭据数据导入新的实例additionalProperties: false配合全部字段的类型约束可用于在导入前对webauthn_credentials列表做严格合法性检查及早发现字段缺失或拼写错误编辑器/IDE 智能提示配合支持 JSON Schema 的编辑器如 VS Code 的json.schemas配置编辑导出文件时即可获得字段补全、类型校验与中文/英文描述提示文档站点自动化该 Schema 由authelia-gen反射生成并随版本归档文档站点docs 目录与运行时导入逻辑共用同一套字段定义保证文档描述与代码实现始终一致CI 校验仓库的生成流程可在 CI 中执行authelia-gen docs json-schema exports webauthn并 diff 产物任何模型字段的变更若未同步重新生成 Schema都会被检出从而避免手工同步遗漏。与相邻导出命令的关系webauthn命令与同一父命令下的totp、identifiers共享完全相同的生成流水线仅传入的目标结构体不同totp→model.TOTPConfigurationDataExport{}定义见 internal/model/totp_configuration.go产物为exports.totp.jsonidentifiers→model.UserOpaqueIdentifiersExport{}定义见 internal/model/user_opaque_identifier.go产物为exports.identifiers.json。三个命令共同覆盖了 Authelia 导出/导入机制中三类最重要的数据TOTP 配置、WebAuthn 凭据、用户不透明标识符形成一套统一的导出数据即 Schema的可校验格式体系。小结authelia-gen docs json-schema exports webauthn虽只是一个叶子命令却完整体现了 Authelia 文档工程化的核心思路以 Go 类型为唯一事实来源single source of truth通过反射与代码注释生成可供外部消费的 JSON Schema并按版本目录归档发布。如果你需要定制输出位置或版本范围重点掌握--file.docs.static.json-schemas.exports.webauthn、--versions、--latest/--next这几个选项即可如需深入底层可从 cmd/authelia-gen/cmd_docs_jsonschema.go 的docsJSONSchemaGenerateRunE与 internal/model/webauthn.go 的导出模型入手继续阅读。【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表