Logto Core 服务版本演进全解从 v1.0.0 到 v1.43.0 的安全加固、协议支持与配置变更指南【免费下载链接】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/core包的 CHANGELOG.md 为骨架系统梳理 Logto 核心服务从 v1.0.0 到 v1.43.0 的完整演进脉络安全加固SSRF 防护、标识符锁定、Token Exchange 边界收紧、新协议能力CIMD 动态应用、SAML 签名请求、Device Flow、Token Exchange、以及大量可操作的环境变量与 Management API 变更。读者将获得一份可直接指导自托管部署升级、安全配置与 API 集成的实战清单并了解每项变更在仓库源码中的落地位置。一、版本结构与文档定位logto/core是 Logto 的认证授权核心服务OIDC / OAuth 2.1 Provider、Management API、Sign-in Experience 后端、Webhook 投递等。本仓库的 packages/core/CHANGELOG.md 记录了该包从1.0.02022 年到1.43.0的全部发布变更按 Changesets 约定划分为Major Changes破坏性变更如1.0.0中用户与管理员服务解耦默认监听3001用户端口与3002管理员端口、包切换为 ESMMinor Changes新功能与安全增强Patch Changes缺陷修复与内部重构Updated dependencies同仓依赖包logto/schemas、logto/console、logto/experience等的联动版本。从源码结构看核心服务对应的实现位于 packages/core/src 下的routes/Management API 路由、oidc/OIDC Provider 初始化与扩展、libraries/业务库与脚本运行时、middleware/Koa 中间件等目录。下文所有源码佐证均指向这些目录中的具体文件。二、安全加固本版本周期最密集的变更主线2.1 SSRF 保护从 OIDC Provider 扩展到全部出站请求1.42.0 / 1.43.0变更内容1.42.0起OIDC Provider 的出站请求默认启用 SSRF 保护58cb52c7051.43.0将该保护扩展到webhook 投递与企业 SSO 连接器请求16f4b2e732覆盖webhook 投递含POST /api/hooks/:id/test测试接口OIDC SSO 连接器的发现discovery、token、userinfo 请求SAML IdP 元数据抓取。凡是通过 Management API 提供的 URL若解析到回环地址、私有网段或云元数据端点169.254.169.254连接即被拒绝。检查发生在连接建立时对实际绑定的 socket 地址做判断因此字面 IP、解析到内网的域名、以及每一跳重定向都会被重新检查。源码佐证核心实现在 packages/core/src/utils/outbound-request.ts。该文件注释明确指出其与 oidc-provider 内置保护复用同一套判定原语isSpecialUseIP避免维护两份可能漂移的 IP 范围列表。其关键机制包括guardSocket()socket 连接后检查remoteAddress若命中特殊用途地址且不在白名单内则销毁连接SsrfProtectedHttpAgent/SsrfProtectedHttpsAgent为got请求注入受保护的node:http(s)AgentssrfProtectedFetch为undici全局 dispatcher 安装同样的守卫保证fetch路径与got路径行为一致文档注释特别解释了为什么要在 socket 层而非解析前检查提前解析存在 TOCTOU 窗口DNS 重绑定、轮询、短 TTL。Action required自托管部署保护默认开启。若你的部署有意向私有网络投递 webhook 或访问 SSO 端点需在启动前通过SSRF_ALLOWED_ADDRESSES以逗号分隔的 IP 或 CIDR 白名单放行例如SSRF_ALLOWED_ADDRESSES10.0.0.0/8,127.0.0.1白名单放行优于整体关闭——除白名单外的所有特殊用途地址含云元数据端点依然被拦截。需要特别注意的是由于CIMD见下文 3.1接受来自未认证调用方的目标 URL一旦配置了该白名单系统会自动禁用 CIMD防止未认证调用方触达私有目标SSRF_PROTECTION_DISABLEDtrue同样会因整体关闭保护而禁用 CIMD上述两个变量仅在自托管部署中生效OIDC_PROVIDER_SSRF_PROTECTION_DISABLED旧变量此前仅覆盖 OIDC Provider 自身请求继续作为SSRF_PROTECTION_DISABLED的别名可用。源码佐证CIMD 开关路由 packages/core/src/routes/logto-config/cimd.ts 在启用 CIMD 时强制校验EnvSet.values.isSsrfProtectionEnabled且ssrfAllowedAddresses.length 0否则返回422 request.invalid_input错误信息明确提示需移除SSRF_PROTECTION_DISABLED、OIDC_PROVIDER_SSRF_PROTECTION_DISABLED与SSRF_ALLOWED_ADDRESSES。2.2 第三方应用边界全面收紧1.43.01.43.0围绕第三方应用third-party app做了多笔安全变更核心思路是缩小第三方应用可触达的授权面Account API 与 Verification API 写操作封禁e516f6eabaAccount API 是为第一方 Account Center 打造的用户在 IdP 自管理账户接口。第三方应用现在调用会收到403 auth.third_party_application_forbidden。该检查默认失败关闭fail closed无法解析为已注册应用的客户端标识一律视为第三方。由此推断两个行为CIMD 客户端其client_id是 URL永远不指向已注册应用被整体拦在写路由之外应用被删除但访问令牌仍存活时也会被拦截。三个只读接口因依赖受保护的验证记录而成为副作用不可达返回401 verification_record.permission_deniedGET /api/my-account/grants、GET /api/my-account/sessions、GET /api/my-account/mfa-verifications/backup-codes。Token Exchange subject token 必须来自第一方应用7692f43b07Token Exchange 不会继承 subject token 的 audience 与 scope而是签发接收方对用户的授权。此前一个被第三方应用持有的访问令牌可被提交给任意启用了 token exchange 的客户端兑换成用户完整的第一方授权。现在 opaque 与 JWT 两条路径都要求 subject token 必须签发给第一方应用签发客户端已不存在的 subject token 也会被拒绝。这是破坏性变更若你此前刻意交换第三方应用签发的访问令牌请求将失败并返回invalid_grant。JWT subject token 增加类型校验508de60b9faccess_token主题路径在令牌非已知 opaque token 时会回退到 JWT 校验但旧实现只验签名与 issuer导致任何由租户密钥签名的 JWT包括仅含认证断言、不含 API 授权的 OIDC ID Token都被当作访问令牌接受。现在要求 JWT subject token 必须携带 RFC 9068 的atjwt类型头与client_id声明二者是 Logto 签发的每个 JWT 访问令牌的必备字段因此合法令牌不受影响ID Token 被以invalid_grant拒绝。挂起用户禁止签发令牌fafc8cd9f3挂起用户虽然会吊销会话与令牌但此前令牌签发本身不检查挂起标记——若吊销部分失败存活的 refresh token 可以无限期续签。现在 OIDC 的findAccount钩子对挂起用户以invalid_grant拒绝与已删除用户处理方式对齐覆盖 refresh token、authorization code、device code、token exchange 与 userinfo 全部用户令牌路径。撤销第三方应用授权不再注销浏览器 SSO 会话3e609e9a71撤销只失效被撤销应用的令牌并要求下次登录重新走 consent浏览器的单点登录会话保持完整。用户 scope 移除后停止继续签发a481ffaba7从第三方应用的 consent 设置中移除用户 scope 后refresh token 兑换会丢弃已移除的 scope基于既有 grant 恢复授权会以invalid_scope失败组织 scope 被移除后组织令牌请求以insufficient_scope被拒。consent 提交流程修复43999c7189consent 页面打开期间被移除的用户 scope 不再被错误授予。2.3 标识符锁定Sentinel策略与规范化键控1.27.0 / 1.43.0Logto 内置失败尝试锁定sentinel机制防止对标识符email / phone / username的暴力破解1.27.0e69ea0373引入signInExperience.sentinelPolicy配置允许自定义锁定策略默认为空对象即套用默认策略type SentinelPolicy { maxAttempts?: number; // 一小时内单标识符最大连续失败次数默认 100 lockoutDuration?: number; // 锁定时长分钟默认 60 };并新增手动解锁接口POST /api/sentinel-activities/delete可按标识符批量删除一小时内当前计数窗口的 sentinel 活动记录。1.43.07bf7131d7b修复了键控不一致问题此前失败计数器按请求原样提交的值键控而用户查找在匹配前会先规范化两者可能不一致从而削弱maxAttempts策略。现在计数器与查找使用同一规范化形式键控email 一律小写、phone 一律规范化canonicalized、username 仅在租户用户名策略为大小写不敏感时折叠大小写。默认大小写敏感策略下Alice与alice是两个账户、两个桶对一个的尝试不会锁死另一个。手动解锁也会清除提交标识符的其他拼写形式。升级注意锁定的重新键控意味着已按非规范拼写记录的活跃锁会在部署后失效受影响用户最多提前lockoutDuration解除失败计数器超过一小时的已不在计数窗口内。相关修复9de40208e21.41.0修复了 sentinel 误触发——Postgres 的count(*)经 Slonik 返回为字符串10 1得到101导致默认阈值 100 在约 10 次失败时就误锁。现强制数值比较。827123faa1.9.2为验证码路径引入了一小时内 5 次失败锁 10 分钟的基准行为。2.4 OIDC Provider 升级至 node-oidc-provider v91.42.07b1ba44fd将 OIDC Provider 从 v8 升级到 v9带来安全与行为双重变化安全撤销 opaque 访问令牌现在会同时撤销同一 grant 下的所有令牌含 refresh tokenv8 中 refresh token 在撤销后仍可继续换取新访问令牌。行为变化撤销端点对 JWT 访问令牌返回unsupported_token_type而非 v8 中返回成功但实际未撤销新增 RFC 8414 授权服务器元数据端点/oidc/.well-known/oauth-authorization-serverID Token 不再包含冗余的at_hash声明仅 token 端点签发的 ID TokenID Token 不再包含可选的typ: JWT头。对自定义 ID Token 校验的 Action required使用官方 Logto SDK 无需任何操作若你的集成做了自定义校验需允许at_hash缺失与typ头缺失。另有配套修复6f43932ae91.43.0EC 签名密钥现在按曲线声明算法——P-256 声明ES256、P-384 声明ES384、P-521 声明ES512RSA 密钥保持RS256默认此前所有 EC 密钥一律声明ES384导致自备 P-256/P-521 私钥的租户在授权端点校验失败。2.5 SAML 与 Webhook 安全1.43.0 等SAML AuthnRequest 签名28885b42d5企业 SSO 的 SAML 连接器现在可对发往 IdP 的 SAML 认证请求AuthnRequest签名。操作路径在连接器上生成服务提供商签名密钥 → 下载证书并在 IdP 注册 → 启用Sign authentication request。支持 RSA-SHA256默认与 RSA-SHA512分阶段密钥staged keys支持零停机证书轮换。IdP 元数据声明WantAuthnRequestsSigned在未启用签名时不再破坏 SAML 登录。Webhook 5xx 重试6d9e42c069webhook POST 在端点返回任意 5xx 时最多重试 3 次与文档化投递契约一致由于重试可能重复投递接收端应按幂等设计处理事件。webhook 投递接入 SSRF 保护见 2.1。SAML IdP 自动提交表单转义209fa0a5cb1.41.0作为 SAML IdP 时发往 SP ACS 的自动提交表单会转义SAMLResponse、RelayState与 action URL 的 HTML 属性值修复了含引号RelayState如 JSON 字符串被浏览器截断的问题同时封堵了反射式标记注入action URL 现仅允许http/https协议杜绝javascript:等可执行 scheme。TOTP 防重放9118867f6c1.41.0记录已接受的 TOTP 时间步进计数器拒绝任何相同或更旧计数器的再次验证在 RFC 6238 接受窗口内强制一次性使用。三、新协议与新能力3.1 动态应用Dynamic App / CIMD1.43.08b2aaab9b0引入了 OAuth Client ID Metadata DocumentsCIMD草案支持兼容的公共客户端典型如 MCP 客户端无需预先注册应用即可连接租户——客户端将公开的 HTTPS URL 作为client_id呈现Logto 从该 URL 抓取客户端元数据。启用方式Console 创建应用页的第三方应用区域中的dynamic app卡片。该开关为租户级、默认关闭且要求 OIDC Provider 的 SSRF 保护处于开启状态见 2.1 的联动禁用逻辑。动态应用页面的权限设置控制此类客户端可请求的内容。源码佐证packages/core/src/routes/logto-config/cimd.ts 提供GET/PATCH /api/configs/cimd管理该租户级开关packages/core/src/oidc/cimd/index.ts 及同目录的redirect-uri.ts、resource-scopes.ts处理元数据抓取后的重定向 URI 与资源 scope 解析。3.2 Custom JWT 与 Actions 脚本合并到统一脚本运行时1.43.0860188898f自托管部署中Custom JWT 与 Actions 脚本统一在共享的 worker-thread 运行池上执行带有 5 秒墙钟截止时间与 128 MB 内存预算——失控或永不收敛的异步脚本会失败而不是挂死令牌签发。脚本返回值必须是可 JSON 序列化的。源码佐证packages/core/src/libraries/script-runner/run.ts 定义了ossScriptLimits { wallClockMs: 5000, memoryMb: 128 }注释说明了该池是进程级共享worker 以{tenantId}:{entry}:{memoryMb}:{sha256(script)}为键杜绝跨租户/跨库复用堆且仅在EnvSet.values.isCloud false时可达Cloud 远程执行脚本。墙钟是始终成立的硬约束因为 worker thread 的--max-old-space-size可被进程级配置覆盖。3.3 OAuth 2.0 Device Authorization Grant设备流1.38.07cee48bd97支持设备流适用于智能电视、CLI、IoT、游戏机等输入受限设备设备展示短用户码与验证 URL → 用户在另一台设备打开 URL 输入验证码并登录 → 原设备收到令牌完成认证。在 Console 创建设备流应用有三种路径Native 框架列表选 Input-limited app / CLI无框架创建后选 Device flow 授权流或创建第三方 Native 应用后选 Device flow。应用设置页内置设备流专属引导与可即时体验的内置 demo。3.4 Token Exchange 与个人访问令牌1.36.0 / 1.38.0 / 1.39.0Token ExchangeRFC 8693在多个版本中逐步完善1.36.07cbe315dde支持 token exchange grant type 并增加应用级控制customClientMetadata.allowTokenExchange。M2M 应用可使用 token exchange新应用默认禁用第一方传统 Web/Native/SPA 应用为向后兼容默认启用第三方应用不允许作为接收方使用Console 中对公共客户端SPA/Native显示风险警告。1.38.06dbafe5f26支持subject_token_typeurn:ietf:params:oauth:token-type:access_token的访问令牌交换实现服务间委派。校验顺序sub_前缀视为遗留模拟令牌向后兼容→ 按 opaque 访问令牌查找 → 回退到用 issuer JWK 集做 JWT 校验。另新增urn:logto:token-type:impersonation_token类型用于显式模拟令牌。访问令牌不做消费追踪同一令牌可被多次交换。1.39.0e0326c96c个人访问令牌PAT。通过用户详情页或POST /users/:userId/personal-access-tokens创建然后调用POST /oidc/token做 token exchangegrant_typeurn:ietf:params:oauth:grant-type:token-exchange subject_token用户的 PAT subject_token_typeurn:logto:token-type:personal_access_token resource可选资源指示器 scope可选 client_id发起请求的客户端标识响应含access_token、issued_token_typeurn:ietf:params:oauth:token-type:access_token、token_typeBearer、expires_in与可选的scope。1.43.0subject token 边界收紧见 2.2。3.5 MFA 与 Passkey 能力栈1.11.0 / 1.32.0 / 1.38.0MFA 自1.11.0引入TOTP 验证器、WebAuthn/Passkey、备份码后持续扩展1.23.0可配置的 MFA 提示策略强制 MFA / 可选 MFA 的一次性提示时机1.32.01fb8593659新增邮件验证码与短信验证码两种 MFA 因子注册或首次登录时支持绑定1.38.0Passkey 登录a023a97c7c——注册时绑定 passkey、登录页 passkey 按钮/标识符优先流程/自动填充三种交互形态已有 WebAuthn MFA 凭证可直接复用自适应 MFAa816cf77cb——在 sign-in experience 配置中启用adaptiveMfa登录流程按规则评估当前登录上下文命中则强制 MFA并新增PostSignInAdaptiveMfaTriggeredwebhook 事件MFA 验证路由接入 Sentinel 保护56cec74a00且 MFA 专用 action 与主登录池隔离避免跨阶段误锁新增可选 MFA 引导页a023a97c7c。1.41.0Account Center 中 passkey 可见性与 passkey 登录提示偏好可独立于 MFA 配置bcd517bacf。3.6 Account Center 与 Account API1.22.0 / 1.37.0 起1.22.07ebef18e3引入 Account API让终端用户不经 Management API 中继直接管理自己的账户资料、email/phone/password、社交身份。用法先通过/api/account-center启用默认关闭并设置各字段权限用client.getAccessToken()获取 opaque 访问令牌并作为Authorization: Bearer token涉及身份验证的请求需带logto-verification-id头。1.37.032d1562699Account Center 单页应用作为内置应用发布支持主邮箱/手机/用户名/密码的验证流更新、TOTP/备份码/Passkey 管理与重命名删除敏感操作以密码/邮箱/手机验证为前置门槛。1.38.074c993a91e/d189d8f5aa会话管理端点GET/DELETE /api/my-account/sessions支持revokeGrantsTargetall|firstParty管理端GET /users/:userId/sessions等与应用授权管理端点GET/DELETE /api/my-account/grants支持appTypefirstParty|thirdParty过滤。1.40.0会话列表响应新增isCurrent标记16553c027。1.43.0Account API 对第三方应用封禁写操作见 2.2。3.7 组织Organizations与 M2M RBAC1.10.0 / 1.12.0 / 1.18.01.12.0becf59169引入 Organizations多租户概念即 workspace/team/company同一身份池内可创建多个组织各自拥有用户配套组织模板适用于所有组织的权限与角色集合。组织角色在1.18.0增加 machine-to-machine 类型87615d58c组织支持client_credentialsgrant。1.10.003bc7888bM2M RBAC——POST/DELETE/GET /applications/:appId/roles与POST/DELETE/GET /roles/:roleId/applications角色区分user与machine-to-machine类型。1.18.0efa884c40组织 JITjust-in-time用户供给——按邮箱域名/organizations/:id/jit/email-domains或 SSO 连接器/organizations/:id/jit/sso-connectors自动加入组织并分配默认角色/organizations/:id/jit/roles。1.40.0Organization.Membership.Updatedwebhook 载荷新增addedUserIds/removedUserIds等增量字段c4c34e6af0PUT /organizations/:id/users改用replaceWithDelta()只写实际变更行26c8c3f2edGET /organizations/:id/users用LATERAL子查询聚合角色以加速大组织分页3edda5243。1.41.0组织角色创建与初始 scope 分配改为事务性811740be44访问令牌 JWT 定制器新增context.organization上下文a305713bb2。3.8 Webhook 体系1.5.0 / 1.17.0 / 1.40.0 / 1.41.01.5.0Console 管理 webhook、签名校验、启用/禁用、最近执行状态、多事件支持新增GET /api/hooks/:id/recent-logs、POST /api/hooks/:id/test、PATCH /api/hooks/:id/signing-key。1.17.0b5104d8c1引入DataHook事件类型覆盖用户/角色/scope/组织/组织角色的创建、删除、数据更新含完整端点 → 事件映射表如POST /users→User.Created交互型事件加interaction前缀。1.40.0GET /api/logs与GET /api/hooks/:id/recent-logs支持enableCaptrue计数在约 1 万行处饱和返回10001哨兵值命中时响应头带Total-Number-Is-Capped: true并省略rellast/relnext链接与start_time/end_time时间窗口过滤Unix 毫秒排他边界start_time end_time返回 400。1.41.0c7f17d6c5c全邮件/SMS 发送路径引入强制性的按收件人发送限流触发节流时发出Message.RateLimitedwebhook并在注册关闭时抑制向未注册收件人投递验证码以防账户枚举。1.42.0f21edfafdfOIDC grant 因超过应用maxAllowedGrants上限被逐出时触发Grant.LimitExceededwebhook。四、Sign-in Experience 配置演进策略类能力4.1 密码策略1.9.0e8b0b1d02引入可配置密码策略支持规则与默认值规则默认值最小长度8最小字符类型数1是否检查已被泄露pwnedtrue是否拒绝重复/顺序字符true是否拒绝包含用户信息true自定义禁用词[]升级用户的旧策略最小长度 8 至少 2 类字符会被翻译为长度8、类型2、pwnedfalse、顺序false、用户信息false、自定义词[]。配置入口Console → Sign-in experience → Password policy或通过 Management API 更新passwordPolicy字段。新用户立即生效存量用户改密时生效通过 Management API 增改用户不再受密码策略限制。1.20.0新增POST /api/sign-in-exp/default/check-password用于预检密码是否符合策略启用拒绝用户信息时需传userId。4.2 验证码、密码过期与用户名策略1.41.0验证码设置eb45edbe34Console Security 设置中可配置验证码过期时长与最大重试次数。密码过期c2016a044cConsole → Security → Password policy 可启用密码过期并设置有效天数。密码到期或管理员手动过期后用户下次密码登录前必须走 forgot-password 流程SSO 与 passkey 登录不受影响。策略存储在 sign-in experience 的passwordExpiration字段密码验证后强制执行PATCH /api/users/:userId/password/expiration可手动过期启用策略时删除最后一个 forgot-password 连接器会被拒绝。无改密历史的老用户以策略启用时间锚定获得完整有效期。用户名策略67b99bba85sign-in experience 存储租户级用户名策略大小写敏感性、长度边界、允许的字符类型作用于终端用户写入路径体验注册/资料完善、Account API、/me管理端写入仅保留基线规则。切到大小写不敏感受保护存在仅大小写不同的用户名时PATCH /api/sign-in-exp返回 409GET /api/sign-in-exp/username-policy/case-sensitivity-conflicts报告冲突。旧环境变量CASE_SENSITIVE_USERNAME与新策略做 AND 合并该变量已弃用、计划下个大版本移除迁移方式为取消设置并按租户配置usernamePolicy.caseSensitive。同时 OIDCpreferred_username声明在profile.preferredUsername未设置时回退到username。4.3 多标识符注册与自定义资料字段1.26.0 / 1.31.0 / 1.41.01.26.013d04d776signUp.secondaryIdentifiers支持多必填标识符email/phone/username/emailOrPhone与主标识符呈 AND 关系示例配置见文档原文如主标识符username 必填已验证 email 与 phone{ identifiers: [username], secondaryIdentifiers: [ { type: email, verify: true }, { type: phone, verify: true } ], verify: true, password: true }1.31.0bb385eb15d注册最后一步收集用户资料Tell us about yourself支持内置字段与自定义字段、拖拽排序、必填校验1.41.0c1ff0c114起严格遵循显式signUpProfileFields列表而非总是展示全量目录。1.36.010a9e68f1dskipRequiredIdentifiers允许社交登录/注册跳过必填标识符采集默认falseConsole 中为Require users to provide missing sign-up identifier复选框默认勾选对需要符合 Apple App Store 社交登录规范的移动应用尤其重要。1.28.0e8df19b7eemailBlocklistPolicy自定义黑名单customBlocklist 子地址限制blockSubaddressing1.42.0增加通配符域名模式与注册/改邮箱的 allowlist 支持1.43.0将 Gmail 别名gmail.com/googlemail.com 等价、忽略本地部分点号纳入自定义邮箱规则匹配。4.4 邮件模板与多语言1.25.0 / 1.32.0 / 1.43.01.25.003ea1f96cManagement API 管理多语言邮件模板PUT/GET/DELETE /email-templates、PATCH /email-templates/{id}/details等模板选择优先级为用户偏好语言来自Accept-Language→ sign-in experience 默认语言 → 连接器默认模板支持user/application/organization/inviter等上下文变量文档原文含 SignIn/Register/ForgotPassword/Generic/OrganizationInvitation/UserPermissionValidation/BindNewIdentifier 各场景变量表。支持的连接器logto/connector-aliyun-dm、connector-aws-ses、connector-mailgun、connector-sendgrid-email、connector-smtppostmark 与 http-email 在提供商侧管理模板。1.32.0ad4f9d6abfOIDC 标准ui_locales参数支持运行时决定托管登录页语言并影响交互触发的邮件本地化原始值以uiLocales变量暴露给邮件模板。1.43.042222f07a4修复Accept-Language中q前含空白的权重解析RFC 7231 允许非数值权重回退默认值而非产生NaN。4.5 应用级与组织级品牌定制1.19.0 / 1.32.01.19.0应用级品牌logo/favicon/颜色62f5e5e0c与组织 logo 及 sign-in experience 覆盖3a839f6d6认证请求带organization_id参数SDK 中经extraParams传递。1.32.00ef4260e34统一应用与组织的品牌定制选项明暗色、logo/favicon、自定义 CSS优先级为组织 应用 Omni sign-in experience。五、环境变量与部署运维清单综合历次变更以下环境变量对自托管运维至关重要均在 packages/core/src/env-set 中解析变量引入版本作用SSRF_ALLOWED_ADDRESSES1.43.0逗号分隔 IP/CIDR 白名单放行有意指向私有网络的 webhook/SSO 出站目标配置后自动禁用 CIMDSSRF_PROTECTION_DISABLED1.43.0整体关闭出站 SSRF 保护同时禁用 CIMD仅自托管生效OIDC_PROVIDER_SSRF_PROTECTION_DISABLED1.42.0旧变量现为SSRF_PROTECTION_DISABLED的别名PRIVATE_KEY_ROTATION_GRACE_PERIOD1.39.0私钥轮换宽限期CLI 对应--gracePeriod期间新密钥标记为 Next、旧密钥保持 Current供客户端刷新缓存的 JWKSSECRET_VAULT_KEK1.30.0OSS 启用 Secret Vault 所需的 base64 密钥加密密钥DATABASE_STATEMENT_TIMEOUT1.36.0设DISABLE_TIMEOUT可省略启动参数PgBouncer/RDS Proxy 场景DATABASE_CONNECTION_TIMEOUT1.21.0覆盖默认 5 秒数据库连接超时CASE_SENSITIVE_USERNAME1.13.0已弃用遗留用户名大小写开关与租户策略 AND 合并计划下个大版本移除ADMIN_PORT/ADMIN_ENDPOINT/ADMIN_DISABLE_LOCALHOST1.0.0管理员服务端口默认 3002、自定义管理员端点、完全禁用本地管理员端点其他运维要点OIDC 会话 TTL5b7f1cb7941.38.0尊重logto-config中oidc.session.ttl覆盖默认会话 TTLOSS 部署改配置后需重启实例启用中心 Redis 缓存可免重启并提供GET/PATCH /api/configs/oidc/session管理 API。刷新令牌 TTL900201a48c1.34.0OIDC grant TTL 对齐为 180 天刷新令牌生命周期扩展到最长 180 天。管理员 OSS 签名密钥直读数据库671a7b73d71.40.0自托管 OSS 无需额外 host/DNS 映射即可加载 admin tenant OIDC 配置。升级注意事项汇总1.43.0标识符锁定重新键控见 2.31.43.0token exchange subject token 限制见 2.21.42.0自定义 ID Token 校验需容忍at_hash/typ缺失见 2.41.19.0起PATCH /applications/:id的 jsonb 字段由 merge 改为 replaceb91ec0cd6。六、更多源码切入点如需深入本版本周期对应的实现细节可继续阅读packages/core/src/utils/outbound-request.tsSSRF 防护的 socket 级实现guardSocket、受保护 Agent、ssrfProtectedGot/ssrfProtectedFetchpackages/core/src/routes/logto-config/cimd.ts 与 packages/core/src/oidc/cimd/index.tsCIMD 开关与元数据解析packages/core/src/libraries/script-runner/run.ts统一脚本运行时的 5 秒/128 MB 资源预算与共享 worker 池packages/core/src/oidc/init.tsOIDC Provider 初始化含 SSRF 开关、会话 TTL、签名算法声明packages/core/src/routes/sign-in-expsign-in experience 配置路由密码策略、sentinelPolicy、secondaryIdentifiers、用户名策略等packages/core/src/routes/logto-config租户级配置CIMD、OIDC 会话等。从整体演进看v1.0.0 至 v1.43.0 的logto/core主线清晰先是用户/管理员服务解耦与协议基础1.0.0随后是 SSO、组织多租户、MFA、webhook 与密码策略等能力扩展1.9.0–1.20.0再到 Account API/Account Center 与 Experience API 的用户自助体系1.22.0–1.37.0最终在 1.38.0–1.43.0 聚焦于设备流、Passkey、Token Exchange 边界收紧与出站 SSRF 防护等安全与互操作性收口。对自托管运维者建议优先核对本文第二、五节列出的安全默认值与环境变量确保升级后行为符合预期。【免费下载链接】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),仅供参考