Logto SSO 配置

通过 Logto Management API 进行 OIDC 身份认证系统的应用管理、角色权限分配和社交连接器配置。

概述

Logto 是团队使用的自托管 OIDC 身份认证平台,部署在 https://logto.dr.restry.cngiraffe Bot 通过 Logto Management API 完成了大量应用配置、权限管理和问题排查工作。

Logto 实例信息

属性
Endpointhttps://logto.dr.restry.cn
JWKShttps://logto.dr.restry.cn/oidc/jwks
Token 签名算法ES384
ID Token 签名ES384

应用清单(10 个)

应用类型App ID说明
Clawline Client WebSPAj760nuoz0h3jr5g9ysogiWeb 聊天客户端
Clawline Gateway WebSPAanbr9zjc6bgd8099ecnx3管理台前端(原 Clawline Gateway,已改名)
Agentic BISPAa749dyaep3vsnv6pdu0jx多 Agent BI 助手 POC
Agent PortalSPAwqzrwjesyo5medejdnfu6研究项目管理平台
ClawCraftSPA8bbiayv3m7sg8uetkbu5hOpenClaw RTS 风格配置面板
MediaCenter NextjsTraditional
sage-nextTraditionalsage portal with nextjs
MediaCenter APPNative手机端应用
Wechat Message ServiceM2M
Sage PortalSPA

API 资源

资源名称Indicator说明
Gateway APIhttp://localhost:8888/旧版网关(已有)
Core APIhttp://localhost:8002/核心接口(已有)
Clawline Gateway APIhttps://gateway.clawlines.net/api新建的 Gateway 资源

关键概念:M2M 应用 vs API 资源

M2M 应用API 资源
角色客户端 / 调用方服务端 / 被调用方
行为拿 AppID + Secret 换 Token被动校验 Token
特征有凭证,无 indicator有 indicator,定义 Scope

角色与权限

角色类型权限
Sage Gateway UsersUserread:products (Core API) + read:gateway (Gateway API)
Gateway API Access RoleM2Mread:gateway (Gateway API)
Clawline AdminUseradmin (Clawline Gateway API)

测试账号

  • 用户名: test_all_apps
  • 密码: Password123!
  • 角色: Sage Gateway Users + Clawline Admin

Microsoft 社交连接器

属性
Connector ID0isvikfq9d4lz1a3mog57
Client ID13f24dae-998e-428d-aceb-10684ceaa645
Tenant ID0a95288c-f914-44cc-99a7-9f29d237db2e
Cloud Instancehttps://login.microsoftonline.com
Promptslogin(原为 none,导致 AADSTS50058 错误)

修复记录

  • 问题: prompt=none 导致静默登录失败(AADSTS50058),浏览器无微软登录 Cookie 时直接报错
  • 修复: 将 Prompts 从 none 改为 login,强制弹出登录框
  • Azure 回调地址: https://logto.dr.restry.cn/callback/azuread-universal

开发环境回调地址

项目开发 URL
ClawCrafthttps://craft.dev.dora.restry.cn/callback
Agent Portalhttps://portal.dev.dora.restry.cn/callback
Agentic BIhttps://bi.dev.dora.restry.cn/callback
Gatewayhttps://gw.dev.dora.restry.cn/callback
Client Webhttps://web.dev.dora.restry.cn/callback

前端接入要点

SPA 前端必须在 LogtoConfig 中显式声明 resources,否则拿到的 Token 不含 API 权限:

const config = {
  endpoint: 'https://logto.dr.restry.cn/',
  appId: '<App_ID>',
  resources: ['https://gateway.clawlines.net/api']
};
 
// 获取 API 专属 Token
const token = await getAccessToken('https://gateway.clawlines.net/api');

相关页面

Management API 使用

Rabbit 成功调通了 Management API,关键发现:

  • Token endpoint: https://logto.admin.dr.restry.cn/oidc/token(admin 租户)
  • Management API: https://logto.dr.restry.cn/api/...(default 租户)
  • M2M 应用 m-default 位于 admin 租户,必须用 admin 的 token endpoint 认证
  • 直接数据库 INSERT 有风险(会漏 secret 生成、tenant 关联等),应优先用 Management API

批量创建应用流程

  1. 用 admin 租户 M2M credentials 获取 access token
  2. 调用 POST /api/applications 创建 SPA 应用
  3. SPA 类型不需要 secret,只需 App ID + Endpoint

SSO 统一接入策略建议

  • 每个站点一个 Application,不共用 App ID
  • SPA 用 @logto/react SDK,纯后端用 JWT 验证
  • 命名规范:站点名-类型
  • 无需改代码的方案:Caddy forward_auth 对接 Logto

Logto 升级记录

版本镜像来源说明
1.30.1ghcr.io/logto-io/logto升级前
1.37.1northacr.azurecr.cn/logto升级后(通过 ACR 中转)

clawlines.net 子域名分配(→ docker-runtime)

子域名项目App ID
craft.clawlines.netClawCraft8bbiayv3m7sg8uetkbu5h
agent-project.clawlines.netAgent Portalwqzrwjesyo5medejdnfu6
bi.clawlines.netAgentic BIa749dyaep3vsnv6pdu0jx
gateway.clawlines.netClawline Gatewayanbr9zjc6bgd8099ecnx3
chat.clawlines.netClawline Client Webj760nuoz0h3jr5g9ysogi

注意:未备案域名不能解析到中国 IP,clawlines.net 需解析到 Azure Global 服务器。