Logto:面向 SaaS 与 AI Agent 的开源现代化认证基础设施
posts posts 2026-06-29T21:02:57+08:00logto-io/logto 把 OIDC / OAuth 2.1 / SAML 封装成开箱即用的认证基础设施,多租户(Organizations)、企业 SSO、RBAC、MFA 一体,并对 MCP 与 AI Agent 场景做了官方支持。本文拆解它的真实架构、SDK 图景、MCP 接入路径与自托管付费边界,帮你判断何时该选它。技术笔记GitHub, SaaS, AI Agent, 开源先给判断
给新兴 SaaS 或 AI 产品补一套完整 auth(登录注册、多租户、企业 SSO、RBAC、MFA),Logto 是当前开源方案里最短的路之一:README 四个卖点全部能在文档和源码里对上号,月度发版节奏稳定(2026-09-30 刚发 v1.44.0),背后的 Silverhand Inc. 提供托管云与付费企业支持。
但它不是"Auth0 免费平替"这么简单——官方自托管方案有明确的付费分档(SAML 应用数量、IdP 发起的 SSO、隐藏品牌等属于 Pro/Enterprise 功能),也不支持 SCIM 这类企业身份生命周期协议。选型时值得把边界看清楚,再决定是否上车。
截至 2026-10-01,仓库 14,647 Stars、1,216 Forks,TypeScript 编写,MPL-2.0 协议,2021 年 6 月创建,头号贡献者 gao-sun(2,100+ 次提交),前后有五位千次提交级的维护者,不是单人项目。
README 的四个卖点,逐条对账
README 的自我定位是 “the modern, open-source auth infrastructure for SaaS and AI apps”,一句 “takes the pain out of OIDC and OAuth 2.1” 概括其价值主张。四个卖点值得逐条核实:
| 卖点(README 原话) | 落到实处 |
|---|---|
| Multi-tenancy, enterprise SSO, RBAC: ready to use, no workarounds | Organizations 模型(含组织角色、成员邀请、JIT provisioning)、SAML/OIDC 企业 SSO、租户级 + 组织级 RBAC,均可在 Console 配置 |
| Pre-built sign-in flows, customizable UIs, SDKs for 30+ frameworks | 预置登录注册 UI(@logto/experience)、30 个官方框架接入指南、npm 上 14 个 JS 生态 SDK |
| Full support for OIDC, OAuth 2.1, and SAML | 三协议在官方文档与源码均有完整实现;注意 SAML 应用数量在自托管免费版受限(见后文) |
| Works out-of-the-box for Model Context Protocol and agent-based AI architectures | 官方维护四篇 AI 用例文档与远程 Logto MCP Server,v1.44.0 还给 ChatGPT / Codex 这类 MCP 客户端补了 refresh token 支持 |
容易误读的一点:Logto 的协议清单里没有 SCIM。企业 IT 常用 SCIM 做用户进出的自动同步,如果你的客户采购清单里点名要它,Logto 目前接不了,别被"协议齐全"的印象带过去。
架构实貌:一个 monorepo,一颗 Node 进程
仓库是 pnpm monorepo,packages/ 下 20 个包。核心几个:
| 包 | 职责 |
|---|---|
@logto/core | 认证服务本体,基于 node-oidc-provider(v1.42.0 起升至 v9)实现 OIDC/OAuth,含 SAML、企业 SSO、MFA、Webhook |
@logto/console | 管理控制台,管理员配置应用、连接器、角色 |
@logto/experience | 端用户看到的登录/注册界面,自带全部流程 |
@logto/connectors | 55 个身份连接器:Google、GitHub、微信、支付宝、飞书、钉钉、Twilio SMS、阿里云 SMS,以及通用 SAML / OIDC / OAuth2 接入 |
@logto/schemas | PostgreSQL 表结构定义(tables/*.sql) |
@logto/cli | 命令行工具,负责安装、升级与日常维护 |
@logto/elements | Lit Web Components 组件集,README 自述"仍在开发、未发布到 npm"——如果你在别处看到把 elements 描述成"登录 UI 组件全家桶",那不是现状 |
运行时依赖两样东西:Node.js(engines 要求 ^22.14.0)和 PostgreSQL。本地起步一条命令:
curl -fsSL https://raw.githubusercontent.com/logto-io/logto/HEAD/docker-compose.yml | \
docker compose -p logto -f - up不想用 Docker 就 npm init @logto(要求自带 PostgreSQL),也有 Render 一键部署模板。启动后是一个进程同时服务管理控制台和登录页,没有外部消息队列或缓存中间件;官方生产部署文档建议加 Redis 做中央缓存(可选)。
“多租户"的准确含义
这里是最容易讲错的地方。Logto 语境里有两个不同层的"多租户”:
部署级多租户(一个 Logto 实例服务多个客户租户)是 Logto Cloud 的架构:每个租户一个专用 PostgreSQL 角色,数据隔离靠 PostgreSQL 行级安全(RLS)强制执行——源码 packages/core/src/tenants/utils.ts 的注释写得很直白:“In multi-tenancy mode, Logto should ALWAYS use a restricted user with RLS enforced to ensure data isolation between tenants”。租户凭据存在 tenants 表里,运行时按租户取 DSN 建独立连接池。自托管 OSS 默认跑两个内置租户(default 和 admin),不是让你一个实例开无数租户。
应用级多租户(你的 SaaS 服务多个企业客户)才是 OSS 用户直接用到的:Organizations 实体。每个 Organization 是一组用户加一套独立的组织角色和权限(organization template),成员邀请、组织级 M2M(machine-to-machine,机对机)应用、按邮箱域名自动分配角色的 JIT(just-in-time,即时)provisioning 都是现成的。官方文档明确说 Organization 就是为多租户应用提供隔离上下文设计的。
写方案文档时别把这两层混着说——“Logto 开箱支持多租户"指的是后者。
接入与 SDK:JS 生态一套 API,其他语言走标准协议
三条起步路径:Logto Cloud(零部署,开发租户免费);GitPod 一键拉起 OSS demo;本地 Docker Compose 或 npm init @logto。
SDK 的真实图景比"30+ 框架"四个字更值得细看:
- JS/TS 生态是亲儿子。npm
@logtoscope 下有 12 个框架 SDK(React、Next.js、Vue、Nuxt、Angular、SvelteKit、Express、Remix、React Native、Capacitor、Chrome Extension 等),外加@logto/node(服务端通用)、@logto/browser、@logto/js三个基础库,框架 SDK 的核心 API 高度一致。 - Python 有官方包(
pip install logto),Go 有github.com/logto-io/go。 - Java Spring Boot、.NET、PHP、Ruby 等没有专用 SDK,官方指南教的是用 Spring Security OAuth2 Client 这类标准 OIDC 库接入——协议标准化之后并不难,但"一份 SDK 多端复用"的体验只在前两档成立。
也就是说,“30+ 框架"里一半是"官方 SDK”,另一半是"官方教程 + 标准协议库”。团队选型时按自己的技术栈对号入座即可。
AI Agent 与 MCP:2026 年的重点投入方向
README 把 MCP 放进四大卖点,官方文档里 AI 是一个独立的用例分区,给了三条接入路径:
- 给你的 MCP server 加认证:用官方 mcp-auth 库 + MCP SDK v2,Logto 作为授权服务器签发 JWT access token,MCP server 验证签名、issuer、audience 后放行。文档用 VS Code 做 MCP client 演示了完整流程。
- 让第三方 AI agent 访问你的 MCP server:第三方 agent 以 OAuth 第三方应用身份接入,用户会看到 consent 授权屏(授权同意页);开启 CIMD(Client ID Metadata Document,OAuth 客户端动态注册规范)动态客户端后,任何 agent 无需预先注册即可连接。
- 让第三方 AI agent 访问你现有的 API:同一套 consent 机制,agent 拿到的权限严格限于用户勾选的范围。
这套设计回应的是 AI 场景特有的问题:access token 的持有者不再是浏览器里的人,而是一个替用户取数据的程序,权限边界必须显式声明、用户可撤回。
Logto 自己也有一个远程 MCP Server(https://mcp.logto.io,Cloud 功能):把地址加进 Claude Code 或其他 MCP 客户端,用自然语言就能让 AI 检测你的项目框架、创建 Logto 应用并生成接入代码,官方口径支持 38+ 框架,还能直接问答 Logto 文档。
版本演进上,MCP 支持在持续加码:v1.44.0(2026-09-30)为 CIMD 动态应用补了 refresh token,ChatGPT、Codex 这类 MCP 客户端的用户不用再等 access token 过期就重新登录。
版本节奏与近期演进
发版极规律:每月末一个 minor,v1.32 到 v1.44 一路走过来。近三个月值得注意的:
- v1.44.0:MFA 信任设备(完成 MFA 后可信任浏览器 1–365 天,默认 30);用户 ID 放宽到 128 字符且支持创建时自定义
id,从 Auth0 迁移时auth0|abc123这类旧 ID 可以原样保留;内置自托管验证码 Cap(Cloudflare Turnstile 不可达时的替代)。 - v1.43.0:安全加固三连——Webhook 与企业 SSO 出网请求的 SSRF 防护(封内网与云元数据地址)、token exchange 强制校验 subject token 必须是真正的 access token(RFC 9068
at+jwt头)、第三方应用被禁止改动用户账户数据。 - v1.42.0:node-oidc-provider 升到 v9(撤销 opaque access token 连带撤销整个 grant);OIDC SSRF 防护默认开启,自托管用户如果回调地址在内网需显式关闭;邮箱访问规则(allowlist + 通配符)。
安全条目密集不是坏事——认证系统的修复日志本来就该长这样。对做企业客户的团队,v1.43 的 SSRF 防护和 v1.44 的迁移友好特性是两个实打实的加分项。
选型账本:和 Auth0 / Keycloak 摆在一起算
Logto 官方的对比页(数据口径 2026-07)给了几个可核实的数字,比泛泛的"更现代"有用:
- 计费模型:Logto Cloud 按 token 计费,免费额度 5 万 MAU(monthly active users,月活跃用户),官方口号是"用户不登录就不收钱";Auth0 的企业 SSO 连接在自助 B2B 计划里只含 3–5 个,超出部分每个 $100/月、硬顶 30 个,M2M token 免费档每月 1,000 个。
- 部署形态:官方对比表里 Auth0 标注 “Cloud only”,Logto 是 “Cloud / private cloud / self-hosted” 三选。
- 迁移:Logto 支持直接导入 Bcrypt、Argon2、MD5、SHA 系、PBKDF2 密码哈希,用户首次登录时自动用 Argon2 重哈希,不用强制重置密码——从 Auth0 或老系统搬家时这是最大的减痛项。
- Keycloak 没进官方对比页,但社区共识清楚:Java 系老牌方案,SPI(Service Provider Interface,扩展点机制)、主题、协议扩展体系极成熟,代价是部署运维和定制都需要专门人力。Logto 用 TypeScript 单进程 + PostgreSQL,运维面小得多;对应地,Keycloak 积累十年的社区生态和边缘场景覆盖仍是优势。
- 官方也诚实列出了 Auth0 更合适的场景:复杂遗留集成、深度绑定 Okta 生态、规模稳定的纯 Cloud 采购。
自托管的付费边界,别踩空
“开源 = 自托管无功能阉割"这个印象需要修正。官方 self-hosted 计划分三档:
- OSS Community:免费永久,完整认证授权能力、用户与应用数量不限、自助 MFA、自带 SMTP。官方承诺"免费功能永不锁定”。
- Self-hosted Pro($199/月起,年付,上限 5 万 MAU):Console 协作者邀请与角色、租户级强制 MFA 策略、自定义登录 UI 资产(Bring your UI)、隐藏 “Powered by Logto”、IdP 发起的 SSO、SAML 应用最多 3 个。
- Self-hosted Enterprise(合同定价):不限 SAML 应用、SLA、LTS 发布通道、内置邮件服务、自定义资源配额。
license 是一个签名文件,贴进 Console 立即生效、离线验证,不依赖厂商在线(源码 packages/core/src/license/ 有完整验签实现)。对白嫖党的影响主要是:免费版会显示 “Powered by Logto”,SAML 应用(作为服务提供方接企业客户)数量受限——B2B SaaS 起步阶段一个 SAML 应用通常够用,但规模化前要把 Pro 的钱算进成本。
适用与不适用
适合:
- 多租户 SaaS 需要 Organization / RBAC / 企业 SSO 三件套,不想自己拼协议;
- 产品涉及 AI Agent 调用受保护资源,需要 MCP 认证与 consent 流程;
- 团队主力在 JS/TS 生态,想全栈一份 SDK 风格;
- 预算敏感,需要"先免费跑起来,规模化后再付费解锁"的路径。
不适合:
- 采购清单点名 SCIM 或其他企业身份生命周期协议的项目;
- 需要白标(去掉 Logto 品牌)、大量 SAML 应用或 IdP 发起 SSO,又不愿付 Pro 费用的场景;
- 团队已被 Keycloak 生态深度绑定、有专职 IAM 人力——切换的边际收益有限;
- 只能提供 PostgreSQL + Node.js 之外运行时合规要求的环境。
小结
Logto 把"协议实现 + 端到端体验 + 管理界面"打包成一个开箱即用的整体,SDK 在 JS 生态内体验统一,MCP 与 AI Agent 支持是 2026 年明确的投入重点,月度发版里安全与迁移特性持续落地。它替代不了 Keycloak 十年积累的边缘场景,也绕不开自托管 Pro 分档的商业边界——但在"给新 SaaS 快速上一套体面的 auth"这个具体题目下,它是当下投入产出比最高的开源答案之一。上线前把 SCIM 缺位和 SAML 应用配额这两条放进采购评估清单,剩下的顾虑大多可以放下。
链接
- 仓库:https://github.com/logto-io/logto
- 文档:https://docs.logto.io
- OpenAPI 浏览器:https://openapi.logto.io
- Cloud:https://cloud.logto.io
- 自托管计划:https://logto.io/self-hosted-plans
- License:MPL-2.0
参与讨论
使用 GitHub 登录。欢迎补充事实、异议与实践。
讨论暂时无法加载。