跳到主要内容

第三方应用(OAuth / OIDC)

Logto 的第三方应用集成让你可以将 Logto 作为外部应用的 身份提供商 (IdP)。

身份提供商 (IdP) 是一种验证用户身份并管理其登录凭据的服务。在确认用户身份后,IdP 会生成认证 (Authentication) 令牌或断言,并允许用户访问各种应用或服务,无需再次登录。

与 将 Logto 集成到你的应用 指南中你自己开发和完全控制的应用不同,第三方应用是由外部开发者或业务合作伙伴开发的独立服务。

这种集成方式非常适合常见的业务场景。你可以让用户使用他们的 Logto 账户访问合作伙伴应用,就像企业用户用 Google Workspace 登录 Slack 一样。你还可以构建一个开放平台,让第三方应用添加“使用 Logto 登录”功能,类似于“使用 Google 登录”。

Logto 是基于 OpenID Connect (OIDC) 协议构建的身份服务,提供 认证 (Authentication) 和 授权 (Authorization) 能力。这使得集成 OIDC 第三方应用就像传统 Web 应用一样简单直接。

由于 OIDC 是在 OAuth 2.0 基础上增加了认证 (Authentication) 层,因此你也可以通过 OAuth 协议集成第三方应用。

引入第三方应用的两种方式​

  • 在 Logto 中注册应用(本指南):你创建应用并配置其权限和重定向 URI。适用于你了解你的合作伙伴的场景。
  • 动态应用:客户端无需预注册,通过一个公开的 HTTPS URL(作为 client ID)提供自己的元数据文档。适用于任何客户端都可能接入的场景,如 MCP 客户端和 AI agent。

两种方式可以同时使用。

在 Logto 中创建第三方应用​

  1. 进入 控制台 > 应用。
  2. 点击“创建应用”按钮,选择“第三方应用”作为应用类型,并选择以下集成协议之一:
    • OIDC / OAuth
  3. 根据第三方应用的类型选择应用类型:
    • 传统 Web:后端可安全存储 client secret 的服务端渲染应用(如 Node.js、PHP、Java)。
    • 单页应用 (SPA):完全在浏览器端运行、无法安全存储密钥的客户端渲染应用(如 React、Vue、Angular)。
    • 原生应用:运行在用户设备上的移动或桌面应用(如 iOS、Android、Electron)。
  4. 输入你的应用名称和描述,点击“创建”按钮。一个新的第三方应用就会被创建。

所有已创建的第三方应用会在应用页面的“第三方应用”标签下进行分类。这种安排有助于你将它们与你自己的应用区分开,便于统一管理。

如需限制哪些用户可以登录第三方应用,请在应用的 规则 标签页配置 应用级访问控制。

集成指南​

查找应用配置信息​

在应用详情页,你可以找到集成所需的 Client ID、Client secret(仅适用于传统 Web 应用)和 OIDC 端点。

如果第三方服务支持 OIDC 发现,只需提供 发现端点。否则,点击 显示端点详情 查看所有端点,包括 授权端点 和 令牌端点。

集成支持第三方 IdP 的服务​

如果你要连接的服务或产品原生支持外部身份提供商配置(如企业 SaaS 平台、协作工具),配置过程非常简单:

  1. 打开该服务的 IdP 或 SSO 配置页面。
  2. 从 Logto 复制 Client ID(如需则还有 Client secret),粘贴到服务的配置中。
  3. 如果服务支持 OIDC 自动发现,提供 发现端点,否则手动复制 授权端点 和 令牌端点。
  4. 从服务配置页面复制 重定向 URI,并将其添加到 Logto 应用的允许重定向 URI 列表中。
  5. 如服务允许,配置 scopes。由于 Logto 是 OIDC 提供商,如需认证 (Authentication) 用户请包含 openid scope(可获取 ID 令牌和 UserInfo 端点)。如只需 OAuth 资源访问,openid scope 可选。

配置完成后,服务会自动处理 OAuth / OIDC 流程。

通过 OAuth / OIDC 协议集成​

如果第三方应用需要以编程方式将 Logto 作为 IdP 集成,应实现标准的 授权码流程。我们建议使用适合你编程语言的 OAuth 2.0 / OIDC 客户端库来实现。

传统 Web 应用属于机密客户端,可以在后端安全存储 client secret。完整实现细节见 授权码流程。

关键步骤:

  1. 发起授权:将用户重定向到 Logto 的授权端点,携带 client_id、redirect_uri、response_type=code 和 scope。
  2. 处理回调:从重定向中接收授权 code。
  3. 交换令牌:在后端向令牌端点 POST code、client_id 和 client_secret。

通过设备流集成​

对于运行在输入受限设备(如智能电视、游戏主机、CLI 工具)上的原生第三方应用,标准的基于重定向的授权码流程可能不可行。在这种情况下,应用可以使用 OAuth 2.0 设备授权许可。

设备流下,设备会显示一个用户码和一个验证 URL。用户在另一台设备(手机、电脑)上访问该 URL,输入用户码并完成认证 (Authentication)。设备会轮询 Logto 的令牌端点,直到授权完成。

备注:

在实现设备流之前,请确保已在 Logto 控制台为你的第三方应用配置所需的 权限。第三方应用请求未启用的 scopes 会被拒绝访问。

完整实现细节见 设备流快速入门。

出于安全考虑,所有 OIDC 第三方应用在被 Logto 认证 (Authentication) 后都会被重定向到 用户授权页面 (Consent screen) 进行用户授权 (Authorization)。

所有第三方请求的 用户资料权限、API 资源权限、组织权限 以及组织成员信息都会在用户授权页面展示。

这些请求的权限只有在用户点击“授权 (Authorize)”按钮后才会授予第三方应用。

consent screen

后续操作​

常见问题​

Logto 使用基于角色的访问控制 (RBAC) 管理用户权限。在用户授权页面 (Consent screen) 上,只会显示用户已通过其角色分配的 scopes(权限)。如果第三方应用请求了用户没有的 scopes,这些 scopes 会被排除,以防止未经授权的授权 (Authorization)。

管理方式如下:

  • 定义带有特定 scopes 的 全局角色 或 组织角色。
  • 根据访问需求为用户分配角色。
  • 用户会自动继承其角色的 scopes。

使用场景:集成 Apache Answer,为你的用户搭建社区

使用 Logto 作为第三方身份提供商 (IdP)