尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Authelia CLI 实战:用 storage user totp export png 将 TOTP 配置批量导出为二维码 PNG

Authelia CLI 实战:用 storage user totp export png 将 TOTP 配置批量导出为二维码 PNG Authelia CLI 实战用 storage user totp export png 将 TOTP 配置批量导出为二维码 PNG【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia本篇指南基于 Authelia 仓库的官方 CLI 参考文档完整解析authelia storage user totp export png子命令的用法、参数与适用场景并结合internal/commands与internal/model中的源码实现说明该命令如何将数据库中的 TOTP 配置逐用户生成otpauth://URI 二维码图片帮助你掌握 TOTP 凭证的批量可视化导出与迁移备份技巧。命令概述把 TOTP 配置导出为可扫描的二维码Authelia 是面向 Web 应用的单点登录SSO多因素认证门户用户启用 TOTP基于时间的一次性密码二次验证时其配置会存储在存储后端SQLite、MySQL 或 PostgreSQL中。authelia storage user totp export png子命令的作用就是把数据库中所有用户的 TOTP 配置批量导出为 QR 码 PNG 图片图片中编码了对应的otpauth://totp/...URI可以被任意支持 TOTP 的认证器 App如 Google Authenticator、Aegis、1Password 等扫描录入。该命令属于authelia storage user totp export命令族中的非可导入格式分支之一——与可往返导入的 YAML 导出不同PNG 导出产物仅用于扫描展示不能直接回导数据库。authelia storage user totp export png [flags]使用示例以下示例直接继承自官方参考文档覆盖了从最简调用到完整指定存储连接的典型用法authelia storage user totp export png authelia storage user totp export png --directory example/dir authelia storage user totp export png --config config.yml authelia storage user totp export png --encryption-key b3453fde-ecc2-4a1f-9422-2707ddbed495 --postgres.address tcp://postgres:5432 --postgres.password autheliapw各示例解读authelia storage user totp export png使用默认配置文件configuration.yml与默认存储配置运行不指定输出目录命令会自行创建一个随机目录存放图片--directory example/dir显式指定 PNG 输出目录该目录必须尚不存在见下文输出目录规则--config config.yml显式指定配置文件路径最后一条不依赖配置文件中的存储段直接在命令行上给出 PostgreSQL 连接参数与存储加密密钥适合运维在临时环境快速导出数据。完整参数参考本命令自有选项参数说明--directory string所有导出的 PNG 文件保存到的目录。不指定时命令会创建一个 8 位随机字母数字名称的目录-h, --help显示帮助信息选项定义见 internal/commands/storage.go--directory的默认值为空字符串帮助文本与internal/commands/const.go中的cmdAutheliaStorageUserTOTPExportPNGExample常量一致。从父命令继承的选项该命令继承自authelia根命令与storage父命令的一组全局选项用于定位配置文件与存储后端-c, --config strings configuration files or directories to load, for more information run authelia -h authelia config (default [configuration.yml]) --config.experimental.filters strings list of filters to apply to all configuration files, for more information run authelia -h authelia filters --encryption-key string the storage encryption key to use --mysql.address string the MySQL server address (default tcp://127.0.0.1:3306) --mysql.database string the MySQL database name (default authelia) --mysql.password string the MySQL password --mysql.username string the MySQL username (default authelia) --postgres.address string the PostgreSQL server address (default tcp://127.0.0.1:5432) --postgres.database string the PostgreSQL database name (default authelia) --postgres.password string the PostgreSQL password --postgres.schema string the PostgreSQL schema name (default public) --postgres.username string the PostgreSQL username (default authelia) --sqlite.path string the SQLite database path要点提示-c, --config默认为configuration.yml可以传多个文件或目录存储连接参数--mysql.*/--postgres.*/--sqlite.path与--encryption-key会在命令执行前映射到配置项如storage.mysql.address、storage.encryption_key映射关系见 internal/commands/storage_run.go 中的ConfigStorageCommandLineConfigRunE若存储后端启用了字段级加密必须提供正确的--encryption-key否则无法解密 TOTP 密钥。源码级实现解析一个命令的完整执行链路入口与前置检查命令入口函数为StorageUserTOTPExportPNGRunEinternal/commands/storage_run.go其执行顺序为通过defer保证退出时关闭存储 Provider 连接ctx.providers.StorageProvider.Close()调用ctx.CheckSchema()检查存储 schema 是否就绪未迁移或未连接会直接返回包装后的错误storageWrapCheckSchemaErr读取--directoryflag交给核心函数runStorageUserTOTPExportPNG。输出目录规则runStorageUserTOTPExportPNGinternal/commands/storage_run.go对输出目录有两条硬性规则阅读源码可以确认目录不存在时才创建若--directory指向的目录已经存在命令直接报错output directory must not exist防止把文件散落到已有目录中未指定时随机命名dir 时命令使用密码学随机源生成 8 位字母数字字符串作为目录名rand.StringCustom(8, random.CharSetAlphaNumeric)目录权限为 0700os.MkdirAll(dir, 0700)创建目录仅属主可读写与凭证数据的敏感性相匹配。数据读取分页遍历全部 TOTP 配置命令以每页 10 条limit : 10为步长循环调用store.LoadTOTPConfigurations(ctx, limit, page)分页读取totp_configuration表中的全部配置直到某一页返回条数小于limit为止。这种分页模式与同文件中的storage user totp exportYAML、export csv、export uri等兄弟命令完全一致意味着无论数据库中有多少用户配置都会全量导出。图片生成256×256 的 otpauth URI 二维码对每一条配置c类型model.TOTPConfiguration包含Username、Issuer、Algorithm、Digits、Period、Secret字段定义见 internal/model/totp_configuration.go生成流程为在输出目录下以username.png命名创建文件filepath.Join(dir, fmt.Sprintf(%s.png, c.Username))每个用户一张独立图片调用c.Image(256, 256)生成二维码。该方法internal/model/totp_configuration.go内部先通过c.URI()构造标准的otpauth://totp/Issuer:Username?secret...issuer...period...algorithm...digits...URI再交给github.com/authelia/otp库的Key.Image(width, height)渲染为image.Image使用标准库image/png的png.Encode(file, img)写入文件并关闭。因此导出的每张 PNG 编码的正是认证器 App 扫码时解析的完整otpauth://URI——包含secret、issuer、algorithm、digits、period全部参数扫描后得到的 TOTP 与在 Authelia 门户内注册的完全一致。成功输出全部完成后命令打印一行汇总格式为Successfully exported %d TOTP configuration as QR codes in PNG format to the dir directory该行为有单元测试保障TestStorageUserTOTPExportPNGRunEinternal/commands/storage_run_test.go先向存储中播种一个名为john的用户 TOTP 配置执行命令后断言无错误、输出包含Successfully exported 1 TOTP configuration as QR codes in PNG format并且dir/john.png文件确实被创建。与同族导出命令的对比authelia storage user totp export家族提供四种格式各有所长选择导出格式时可对照子命令产物用途是否可回导exportYAML 文件默认authelia.export.totp.yml-f指定迁移、备份可配合storage user totp import回导是export csvCSV 文件表头issuer,username,algorithm,digits,period,secret导入到其它支持 CSV 批量导入的认证器否export uri控制台逐行输出otpauth://URI手工粘贴或管道处理否export png每用户一张 256×256 二维码 PNG给最终用户直接扫码否对应参考文档authelia_storage_user_totp_export.md、authelia_storage_user_totp_export_png.md。安全与运维注意事项PNG 与明文密钥同等敏感二维码编码的otpauth://URI 中包含 TOTPsecret明文任何能读取这些 PNG 的人都可以向自己的认证器 App 录入同一 TOTP。建议导出后立即将目录压缩归档、限制访问权限使用完毕及时清理目录必须不存在再次执行同一--directory会直接失败这是刻意设计避免覆盖既有文件如需重新导出先删除旧目录或改用--directory指定新路径依赖有效存储连接命令要求配置中启用 storage 段SQLite/MySQL/Postgres 任一且 schema 已初始化CheckSchema会拦截未迁移的库存储启用加密时必须额外提供--encryption-key与文件型用户库的区别若你的 Authelia 使用file用户提供方且未配置 storage则不存在数据库中的 TOTP 配置可供导出该命令仅对基于 storage 的部署有意义。延伸阅读本命令参考文档authelia_storage_user_totp_export_png.md核心实现internal/commands/storage_run.go、命令注册internal/commands/storage.goTOTP 模型与otpauth://URI 构造internal/model/totp_configuration.go单元测试internal/commands/storage_run_test.go配置模板参考config.template.yml【免费下载链接】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),仅供参考
返回列表