Logto @logto/schemas 包深度解析:数据库表、类型定义与 Alteration 迁移机制全指南
Logto logto/schemas 包深度解析数据库表、类型定义与 Alteration 迁移机制全指南【免费下载链接】logto Authentication and authorization infrastructure for SaaS and AI apps, built on OIDC and OAuth 2.1 with multi-tenancy, SSO, and RBAC.项目地址: https://gitcode.com/GitHub_Trending/lo/logto导读本指南以 Logto 开源仓库中packages/schemas包的变更历史CHANGELOG.md为骨架系统讲解 Logto 的数据库 schema 中枢所有业务表的 SQL 定义、与之配套的 TypeScript 类型与 zod 校验器、多租户 Row-Level Security 策略以及承载数据库版本演进的 Alteration变更脚本机制。读完本文你将掌握 Logto 数据层的初始化顺序、alteration 脚本的编写与部署规范并能通过变更日志反推 OIDC、组织 RBAC、MFA、Account API、Dynamic AppCIMD等核心能力的落库方式为自己的部署升级与二次开发提供依据。一、包定位Logto 的单一数据源logto/schemas是 Logto 工作区中所有数据库 schema 及其 TypeScript 定义与工具函数的中心包见 README.md 开篇说明。它承载三件事SQL 表定义tables/目录下存放 80 张业务表的建表 SQL例如users.sql、applications.sql、organizations.sql、sign_in_experiences.sql类型与校验器src/下通过解析 SQL 注释生成对应的 TypeScript 类型和 zod guard供 core、console、experience 等包消费数据库迁移alterations/目录存放全部历史变更脚本是 Logto 数据库版本演进的时间线。从 package.json 可以看到当前版本为1.43.0使用node ^22.14.0对应变更日志 1.27.0 中bump node version to ^22.14.0构建产物包含lib、alterations、alterations-js与tables四部分发布为公共 npm 包。1.1 构建流程从 SQL 注释生成类型包的build脚本依次执行pnpm generate、tsc 编译与build:alterations。其中generate由 generate.sh 完成先用 tsc 编译生成器本身再运行生成器把tables/*.sql中的表结构连同/* use SomeType */这类注释解析为 TypeScript 类型与 zod guard输出到src/db-entries/与src/gen/。这也解释了变更日志 1.3.0 中为所有必填字符串型数据库字段的 zod guard 增加最小长度 1这一改动——guard 是自动生成后统一注入规则的。从 src/gen/utils.ts 的实现可以看到解析器如何处理 JSDoc 注释stripLeadingJsDocComments、去掉非开头的注释removeUnrecognizedComments并利用括号匹配findFirstParentheses提取嵌套类型。src/index.ts最终将 foundations生成的库条目、types、api、seeds、consts、utils 全部导出供其他包统一引用。二、表初始化机制四条阶段与三个生命周期脚本README.md 明确了 Logto CLI 建表时执行 SQL 的固定顺序这是理解整个数据层的地基先执行tables/_before_all.sql再按/* init_order number */片段中数字的升序执行带该注释的tables/*.sql然后按文件名升序tables/目录或表名升序src/models/执行不含init_order注释的 SQL最后执行tables/_after_all.sql。第 2、3 步还有两条附加规则若某 SQL 文件中没有/* no_after_each */片段则每个 SQL 文件执行后都要运行一次tables/_after_each.sql生命周期脚本tables/_[lifecycle].sqlbefore_all、after_each、after_all本身会被排除在普通执行之外。生命周期脚本内支持占位符after_each中可用${name}代表当前文件名tables/或表名src/models/所有生命周期脚本中可用${database}代表当前数据库。2.1 三份生命周期脚本的实际作用结合真实文件可以看清每个阶段干了什么_before_all.sql为当前数据库创建租户角色logto_tenant_${database}_after_each.sql为每张新表挂上多租户基础设施——创建set_tenant_id触发器自动填充tenant_id、启用行级安全alter table ${name} enable row level security、创建 restrictive 的*_tenant_id策略using (tenant_id (select id from tenants where db_user current_user))以及*_modification策略_after_all.sql收尾授权——把 CRUD 权限授予租户角色对tenants、systems、service_logs表做最小化授权并在tenants上启用 RLS 与tenants_tenant_id策略。这也呼应了变更日志 1.0.0 中Decouple users and admins一节末尾的说明Logto 使用 Postgres 行级安全Row-Level Security隔离租户数据。从源码看该机制在每次建表时都会自动生效属于全局强制。三、Alteration数据库版本的演进机制Logto 不使用传统 ORM 迁移框架而是自研了一套名为 Alteration 的脚本体系。alterations/README.md 给出完整规范3.1 文件命名与不可变性变更脚本命名格式为version-timestamp-name.jstimestamp是脚本创建时的 Unix 时间戳name是脚本名称version是当前 npm 包版本号开发阶段的版本号为next。脚本一旦创建并发布内容就不得再修改如需调整必须新建脚本——这是保证可重复迁移的关键约定。发布流程由 update-next.sh 自动完成读取 package.json 版本号并把alterations/下所有next-*.ts重命名为版本号-*.ts。这也是package.json中prepublishOnly脚本校验! ls alterations/next-*的原因发布前不允许残留 next 脚本。3.2 脚本结构up 与 down每个 alteration 文件导出一个标准对象type AlterationScript { up: (connection: DatabaseTransactionConnection) Promisevoid; down: (connection: DatabaseTransactionConnection) Promisevoid; };执行时调用up完成 schema 变更down为未来的降级功能预留。例如export const up async (connection) { await connection.query( alter table user add column email varchar(255) not null; ); }; export const down async (connection) { await connection.query( alter table user drop column email; ); };3.3 部署未发布脚本需要测试尚未发布的next版本脚本时运行pnpm alteration deploy next对应 CLI 包的db alteration系列命令参考 packages/cli/src/commands。升级生产环境时只需按往常执行数据库 alteration 命令即可1.0.0 变更说明中明确simply run the database alteration command as usual。仓库 alterations/ 目录现存 200 个脚本文件名本身即是一部数据演进编年史从1.0.0-1677765137-seed-for-admin-tenant.ts管理员租户种子、1.0.0_rc.0-1674032095.5-multi-tenancy.ts多租户化、1.10.1-1696657546-organization-tables.ts组织表、1.13.0-1702871078-protected-application-type.ts保护应用到最新的1.43.0-1785488115-add-cimd-permission-ceiling-tables.tsCIMD 权限上限表、1.43.0-1786333495-add-trusted-devices.ts可信设备与下文变更日志逐条对应。四、从 CHANGELOG 看核心能力演进1.0.0 → 1.43.0变更日志完整记录了logto/schemas从 1.0.0 到 1.43.0 的功能演进。以下按主题梳理关键变更并与源码互相印证。4.1 1.0.0用户与管理员解耦Breaking1.0.0 是标志性的破坏性版本Logto 从单端口拆分为双端口——普通用户端口3001、管理员端口3002。相关配置项默认 Admin Console 地址改为http://localhost:3002/consoleADMIN_PORT环境变量修改管理员端口如ADMIN_PORT3456ADMIN_ENDPOINT指定自定义管理员端点如ADMIN_ENDPOINThttps://admin.your-domain.com设置ADMIN_DISABLE_LOCALHOST1且不设置ADMIN_ENDPOINT可完全禁用本地管理员端点管理员数据不再出现在普通用户端点与 Admin Console 审计日志中日志仍写入数据库仪表盘数字会略降管理员被排除。同版本还包含包全面切换为 ESMsettings表被移除、新增systems表GET/PATCH /settings替换为GET/PATCH /configs/admin-consolepasscode命名全面替换为verificationCodesms命名替换为phone。4.2 应用与 OIDC 能力应用模型与 OIDC 协议能力是演进最密集的领域1.4.0新增alwaysIssueRefreshToken配置为不完全符合 OIDC 规范的 OAuth 集成始终签发 Refresh Token即使授权请求中没有promptconsent1.6.0Console 展示 OpenID Provider 配置端点支持配置 Rotate Refresh Token 与 Refresh Token TTL1.13.0应用表新增is_third_party列Logto 作为 IdP并新建application_user_consent_resource_scopes、application_user_consent_organization_scopes、application_user_consent_user_scopes、application_user_consent_organizations、application_sign_in_experiences五张第三方应用授权相关表对应 alterations 目录中的1.13.0-1702372401-add-application-permissions-tables.ts等脚本1.19.0应用新增custom_data字段与PATCH /applications/:applicationId/custom-dataAPI安全应用machine-to-machine、传统 Web、Protected支持多应用密钥与过期时间配套POST /api/applications/{id}/secrets系列管理 API1.34.0修复 Refresh Token 生命周期——此前 Provider grant TTL 被默认两周上限截断导致刷新令牌 14 天过期现在将 OIDC grant TTL 对齐为 180 天并把 Refresh Token TTL 上限扩展到 180 天1.36.0customClientMetadata新增allowTokenExchange字段控制应用能否发起 token exchangeM2M 应用支持新应用默认关闭第三方应用禁止同时支持重定向 URI 通配符*仅 Webhostname/pathname 允许scheme/port/query/hash 禁止hostname 通配必须含至少一个点1.38.0支持 OAuth 2.0 Device Authorization Grant设备流Console 创建应用时可选择 Input-limited app / CLI 或为应用单独选择 Device flow 授权流customClientMetadata新增maxAllowedGrants并发授权上限配合新的 OIDCauthorization.success事件监听器在授权成功时校验并发授权数并回收最旧的 grant1.43.0新增 Dynamic App 支持——兼容 MCP 客户端等公共客户端免注册直连租户遵循 OAuth Client ID Metadata DocumentsCIMD草案客户端以公开 HTTPS URL 作为client_idLogto 从该 URL 拉取客户端元数据。该开关位于创建应用页第三方应用分区的 Dynamic App 卡片租户级、默认关闭且要求 OIDC Provider 的 SSRF 防护处于激活状态。对应的落库脚本包括1.43.0-1785835991-add-cimd-client-identifier-columns.ts、1.43.0-1785488115-add-cimd-permission-ceiling-tables.ts、1.43.0-1786325989-add-cimd-grant-organizations-table.ts与1.43.0-1786431364-add-cimd-grant-client-snapshots-table.ts。4.3 组织、角色与 RBAC1.9.0roles表新增type字段User/MachineToMachine两种角色不可互相混用分配但 scope 可同时分配给两类角色1.12.0新增sso_connectors、user_sso_identities表sign_in_experiences新增single_sign_on_enabled列1.13.0新增租户角色枚举与 scope 枚举1.16.0组织支持customData字段Console 组织详情页或组织 Management API 维护1.17.0建库种子时创建预配置的 Management API 访问角色新增DataHook事件类型并附上完整的事件与 API 端点映射表见下文支持用户默认角色1.18.0M2M 应用可关联组织并分配组织角色client_credentials授权流支持组织新增/api/organizations/{id}/applications等端点组织可要求成员配置 MFA未满足者无法获取组织访问令牌新增组织 Just-In-Time 用户供给——按邮箱域名/organizations/{organizationId}/jit/email-domains或 SSO 连接器/organizations/{organizationId}/jit/sso-connectors自动加入组织并可配置默认组织角色/organizations/{organizationId}/jit/roles1.30.0为organization_user_relations表增加租户感知外键(tenant_id, user_id)引用users (tenant_id, id)修复跨租户错误分配用户导致 RLS 遮蔽数据、接口返回 500 的问题1.40.0新增两张二级索引以加速高频查询——organization_role_user_relations (tenant_id, organization_id, user_id)支撑每次GET /organizations/:id/users/:userId/scopes调用的getUserScopes与按用户查角色的 join以及organization_user_relations (tenant_id, user_id)支撑每次登录时getOrganizationsByUserId与/organizations/:id/users/:userId/roles的成员存在性中间件。DataHook 事件映射1.17.0节选API 端点事件POST /usersUser.CreatedDELETE /users/:userIdUser.DeletedPATCH /users/:userId 等User.Data.UpdatedPATCH /users/:userId/is-suspendedUser.SuspensionStatus.UpdatedPOST /roles / PATCH /roles/:idRole.Created / Role.Data.UpdatedPOST /roles/:id/scopes 等Role.Scopes.UpdatedPOST /resources/:resourceId/scopes 等Scope.Created / Deleted / Data.UpdatedPOST /organizations 等Organization.Created / Deleted / Data.UpdatedPUT /organizations/:id/users 等Organization.Membership.UpdatedPOST /organization-roles 等OrganizationRole.*POST /organization-scopes 等OrganizationScope.*此外用户交互邮箱/手机号绑定、MFA 绑定、社交/SSO 绑定、密码重置、注册也会触发对应事件。4.4 Sign-in Experience 与注册登录策略sign_in_experiences表见 sign_in_experiences.sql是租户登录体验的配置中心多个版本在此持续加列1.9.0新增密码策略passwordPolicy——最小长度默认 8、最小字符类型数默认 1、pwned 检查默认开启、禁用重复/顺序字符默认开启、禁用用户信息默认开启、自定义禁用词默认[]。老用户升级时保持原策略长度 8、至少 2 类字符、pwned 关闭等的等价换算1.15.0完整支持 OIDC 标准 claimsprofile、address等 scope 对应映射新 claims 存入user.profile字段未设置值回退为undefined而非null以减小 ID Token 体积1.18.0支持同意条款策略agreeToTermsPolicy三种取值Automatic继续使用即视为同意、ManualRegistrationOnly注册时勾选登录不需要、Manual注册或登录时勾选对应表中agree_to_terms_policy枚举1.22.0新增supportEmail、supportWebsiteUrl错误页展示联系信息与unknownSessionRedirectUrl会话未知时将用户重定向到自定义 URL替代默认 4041.26.0注册标识符全面解耦——新增signUp.secondaryIdentifiers字段采用 AND 逻辑强制收集多个标识符并支持emailOrPhone互斥类型移除了注册标识符必须同时是登录方式启用 username 注册必须配密码等旧约束。Console 端改为可拖拽排序的多选器第一项为主标识符存identifiers其余存入secondaryIdentifiers{ identifiers: [username], secondaryIdentifiers: [ { type: email, verify: true }, { type: phone, verify: true } ], verify: true, password: true }{ identifiers: [username], secondaryIdentifiers: [{ type: emailOrPhone, verify: true }], verify: true, password: true }1.27.0新增sentinelPolicy字段见下文 4.7新增 CAPTCHA 机器人防护Console 路径为 Security → CAPTCHA → Bot protection支持 Google reCAPTCHA Enterprise 与 Cloudflare Turnstile1.31.0注册流程末步收集用户画像ConsoleSign-in Experience → Collect user profile支持内置字段姓名、性别、出生日期、地址等与自定义字段可拖拽排序、必填校验1.35.0reCaptcha 域名可自定义如recaptcha.netreCAPTCHA Enterprise 支持 Invisible默认后台自动打分与 CheckboxIm not a robot 交互两种模式模式需与 Google Cloud Console 中的 key 类型匹配1.36.0新增skipRequiredIdentifiers选项允许社交登录/注册跳过强制标识符收集默认falseConsole 中为Require users to provide missing sign-up identifier勾选框默认勾选——该能力源自 Apple App Store 对 Sign in with Apple 不得额外收集信息的要求1.41.0新增租户级用户名策略usernamePolicy大小写敏感性、长度边界、允许字符类型应用于体验侧全部用户名写入路径注册、画像补全、Account API、/meManagement API 仅保留基础基线规则。切换到大小写不敏感时有 409 保护PATCH /api/sign-in-exp在存在仅大小写差异的用户名时被拒绝并新增GET /api/sign-in-exp/username-policy/case-sensitivity-conflicts冲突查询端点。兼容旧的CASE_SENSITIVE_USERNAME环境变量有效大小写敏感性 租户策略与环境变量的 AND 组合环境变量为false时强制所有租户大小写不敏感且租户策略无法重新开启该环境变量已废弃、将在下一个大版本移除。同时 OIDCpreferred_usernameclaim 在profile.preferredUsername未设置时回退到username1.41.0新增密码过期策略passwordExpiration存储于 sign-in experience——Console → Security → Password policy 开启并设置有效期天数过期用户在下次密码登录前强制走忘记密码流程PATCH /api/users/:userId/password/expiration支持管理员手动使某用户密码过期策略启用期间删除最后一个忘记密码连接器会被拒绝。历史用户以策略启用时间为锚点获得完整有效期1.42.0新增自定义域名验证文件支持——管理员可为激活的自定义域名配置小型文本/JSON 验证文件仅限根级文件名或/.well-known/下路径有数量与内容大小上限以安全 Content-Type 提供精确的 GET/HEAD 匹配已有 Logto 路由优先。4.5 MFA 与账户安全1.11.0引入多因素认证MFA支持验证器 App OTPTOTP、WebAuthn Passkey硬件安全密钥、备份码三类因子并可配置强制或可选策略1.23.0新增 MFA 提示策略——开启 Require MFA 时用户必须设置 MFA 否则被锁定关闭时可选择不询问注册时一次性可跳过提示注册后登录时一次性可跳过提示1.29.0可通过 Account API 管理 WebAuthn passkey绑定、管理并实现 Related Origin Requests 规范允许与 Logto 登录页不同域的网站管理 passkey1.30.0引入 Secret Vault 与联合令牌集存储——社交与企业 SSO 连接器可开启令牌存储认证后自动加密保存 Provider 签发的令牌集应用可通过 Account API 免重认证获取 access token 访问第三方 APIOSS 部署需设置SECRET_VAULT_KEK环境变量base64 密钥用于加解密对应脚本1.29.0-1750744518-add-secrets-table.ts、1.30.0-1750744685-add-triggers-to-delete-secrets-on-social-identities-deletion.ts等1.32.0新增两类 MFA 因子——邮箱验证码与短信验证码支持注册/首次登录绑定、后续登录专用验证页同时统一应用与组织的品牌定制选项明暗模式品牌色、logo/favicon、自定义 CSS优先级为 Organization Application Omni 登录体验设置1.37.0发布内置 Account Center 单页应用——支持主邮箱、手机号、用户名、密码的带验证流程的档案更新TOTP/备份码/passkey 的 MFA 管理含重命名、删除敏感操作以密码/邮箱/手机验证门禁1.38.0TOTP、WebAuthn、备份码的 MFA 验证路由接入 Sentinel 防护新增 MFA 专属 Sentinel actions与主登录尝试池隔离避免跨阶段/因子的错误锁定1.40.0GET /api/my-account/sessions每条会话新增isCurrent: boolean字段用于在会话管理 UI 中标记本设备并避免误回收当前会话。4.6 Webhook、安全防护与运维1.5.0Webhook 能力全面增强——Console 管理、签名校验、启停、最近执行状态、多事件订阅hookschema 新增name、events、signingKey、enabled字段新增GET /api/hooks/:id/recent-logs24h 执行日志、POST /api/hooks/:id/test、PATCH /api/hooks/:id/signing-key等 API1.16.0Hook 事件类型重构——新增DataHook数据变更触发既有交互类事件加interaction前缀如完成登录1.30.0社交验证 APIPOST /api/verifications/social支持自定义scope参数生成授权 URI缺省时使用连接器默认 scope1.34.0新增Identifier.Lockoutwebhook 事件在用户因重复失败登录被锁定时触发1.39.0JWT Customizer 错误处理可配置——core 将api.denyAccess()保留为access_denied把阻塞模式下其余脚本失败转换为本地化invalid_request响应Console 新增 Error handling 页签新建脚本默认开启blockIssuanceOnError存量脚本保持旧默认关闭。同时支持私钥轮换宽限期环境变量PRIVATE_KEY_ROTATION_GRACE_PERIOD或 CLI--gracePeriod宽限期内新密钥标记为 Next、旧密钥保持激活避免客户端刷新 JWKS 缓存期间出现认证中断宽限期结束后新密钥转 Current、旧密钥转 Previous1.41.0新增系统级每收件人发送限流——覆盖体验验证码含 MFA、账户与管理验证码 API、/me、组织邀请及遗留交互 API 的全部邮件/短信发送路径被限流时发出Message.RateLimitedwebhookConsole webhook 设置中可选该事件注册关闭时抑制向未注册收件人发送验证码防止账户枚举。同时新增应用级访问控制Console Security 设置可基于用户 ID、用户角色、组织、组织角色自定义规则未授权用户登录时看到访问被拒错误并支持自定义验证码过期时长与最大重试次数Console Security 设置1.42.0邮件黑名单规则支持通配符邮箱模式黑名单策略从公共登录体验响应中移除防止内部应用密钥通过 Management API 泄露。4.7 关键配置结构sentinelPolicy1.27.0 在signInExperience中新增的sentinelPolicy是理解 Logto 暴力破解防护的入口其类型定义与默认值如下type SentinelPolicy { maxAttempts?: number; // 每标识符每小时内最大连续失败次数默认 100 lockoutDuration?: number; // 超过上限后的锁定分钟数默认 60 };字段为空对象时套用默认策略。从 tables/sign_in_experiences.sql 可见sentinel_policy jsonb /* use SentinelPolicy */ not null default {}::jsonb且src/consts/sentinel.ts定义了各交互场景的 Sentinel 活动类型。alterations 目录中1.27.0-1744013256-add-sentinel-policy-column-to-sie-table.ts、1.27.0-1744357867-add-sentinel-activities-hash-index.ts、1.41.0-1781689400-add-sentinel-activities-created-at-index.ts记录了该能力的落地过程。4.8 用户、密码与令牌1.15.0POST /users支持直接携带密码摘要与对应算法创建用户src/types与 seeds 中可找到user_password_encrypt_method相关定义1.19.0passwordAlgorithm新增Argon2d、Argon2id支持使用这些算法的用户在下次成功登录时迁移到Argon2i1.20.0新增个人访问令牌PAT——Console 用户详情页或POST /users/:userId/personal-access-tokens创建通过 token exchange 端点换取访问令牌POST /oidc/token grant_typeurn:ietf:params:oauth:grant-type:token-exchange subject_token用户的 PAT subject_token_typeurn:logto:token-type:personal_access_token client_id客户端 ID响应包含access_token、issued_token_typeurn:ietf:params:oauth:token-type:access_token、token_typeBearer、expires_in与可选scope1.25.0支持 legacy 密码类型——将password_encryption_method设为legacy在password_encrypted中按 JSON 字符串存储[hash_algorithm, [argument1, ...], expected_hashed_value]参数中可用代表输入密码。例如 SHA256 加盐[ sha256, [salt123, ], c465f66c6ac481a7a17e9ed5b4e2e7e7288d892f12bf1c95c140901e9a70436e ]验证时等价于crypto.createHash(sha256)对salt123 输入密码求摘要便于从其他带盐哈希体系迁移1.29.0password_encrypted长度扩展到 256部分哈希算法摘要超过 128 字符user_sso_identities表新增updated_at每次成功 SSO 登录刷新新增oidc_session_extensions表存储 OIDC 会话附加数据1.34.0 之前Refresh Token 生命周期问题已在 4.2 说明。4.9 JWT Customizer 与体验侧细节1.37.0JWT Customizer 脚本新增应用上下文access token 与 client credentials token 均可访问应用的 name、description、custom data1.38.0新增可选oidc.session.ttl配置logto-config自定义 OIDC Provider 会话 TTL秒缺省为 14 天OSS 部署修改后需重启服务启用中央 Redis 缓存可免重启自动生效1.41.0组织访问令牌同时携带organization_id与resource的令牌的 JWT Customizer 现在能收到context.organization对象含目标组织的id、name、description、customData可在脚本中按组织附加 claims如把 Logto 组织 ID 映射到customData中的内部 ID无需把用户所属全部组织映射塞进每个令牌此前organization_idclaim 在 customizer 运行后才注入1.42.0修复登录体验与 Account Center 的首屏主题闪屏——在应用水合前就应用租户主题、平台与品牌色1.43.0统一 Sign-in Experience 与 Account Center 的社交回调 URI。4.10 OIDC 参数与登录提示1.20.0signIn支持login_hint参数预填用户标识React SDK 示例signIn({ redirectUri, loginHint: userexample.com, firstScreen: signIn })1.32.0支持 OIDC 标准ui_locales认证参数——SDK 中通过extraParams传入运行时选择租户语言库中第一个受支持的语言标签并影响交互触发的邮件本地化原始值以uiLocales变量暴露给邮件模板。例如显示法语加拿大登录页await logtoClient.signIn({ redirectUri: https://your.app/callback, extraParams: { ui_locales: fr-CA fr en, }, });1.19.0组织 logo 与登录体验覆盖——在 SDKsignIn的extraParams中传organization_id即可用组织品牌覆盖登录页 logo。五、升级与运维注意事项综合各版本变更升级logto/schemas及其联动包时值得关注的运维要点升级即迁移升级后务必运行数据库 alteration 命令db alteration脚本按 4.3 的next-*重命名与up执行机制保证可重复离线部署1.40.0 起install与db seed命令支持--dapc别名--disable-admin-pwned-password-check用于禁用管理员租户种子里默认开启的 Have I Been PwnedHIBP泄露密码检查——该检查会在每次管理员密码提交时外呼api.pwnedpasswords.com在无法访问外网的 air-gapped 环境会导致首次管理员注册卡住密钥与令牌1.19.0 起安全应用可使用多密钥过期时间做轮换旧密钥仍可用于客户端认证但建议删除重建1.39.0 的PRIVATE_KEY_ROTATION_GRACE_PERIOD可让签名密钥轮换无缝衔接1.34.0 后 Refresh Token 生命周期以配置的 TTL 为准上限 180 天环境变量清理CASE_SENSITIVE_USERNAME已废弃迁移到usernamePolicy.caseSensitive并按租户配置SECRET_VAULT_KEK是启用 Secret Vault 的前提锁与限流sentinelPolicy控制标识符锁定阈值默认 100 次/小时、锁 60 分钟1.41.0 的按收件人发送限流为系统级强制被限流会触发Message.RateLimitedwebhook。六、小结logto/schemas是 Logto 数据层的唯一事实来源tables/定义物理表src/提供类型与 zod guardalterations/记录可追溯的演进历史。其变更日志本身即是最权威的功能地图——从 1.0.0 的用户/管理员解耦到组织 RBAC、OIDC 协议扩展token exchange、device flow、CIMD、MFA 矩阵、Account API 与安全防护策略每一个能力都能在表定义或 alteration 脚本中找到落点。对于部署运维者本文第五章的升级清单可直接作为版本升级 checklist对于二次开发与贡献者alterations/README.md 与 README.md 是进入数据层开发的起点。【免费下载链接】logto Authentication and authorization infrastructure for SaaS and AI apps, built on OIDC and OAuth 2.1 with multi-tenancy, SSO, and RBAC.项目地址: https://gitcode.com/GitHub_Trending/lo/logto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考