Logto OIDC connector 怎么接入任意支持 OIDC 协议的身份提供商
【免费下载链接】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
如果你手里已经有一个支持 OpenID Connect 协议的身份提供商(自建 IdP 或第三方身份服务),想让用户用它来登录基于 Logto 的应用,Logto 内置的 OIDC connector 就是对应的接入方式。它不绑定任何特定厂商,只要对方支持 OIDC,都可以配成一个社交登录连接器:在 Logto Console 里创建 connector 并填入身份提供商的端点与凭据,然后在 Sign-in experience 中启用社交登录按钮,用户即可完成第三方登录。
需要明确的前提:身份提供商必须支持 OIDC 协议,这是配置有效 connector 的先决条件(见 connector README)。另外 OIDC connector 在 Logto 中属于特殊类型,同一租户下可以添加多个基于 OIDC 协议的 connector 实例。
在身份提供商侧收集接入信息
开始配置前,按身份提供商的文档注册一个用于 OIDC 授权的应用,并收集下面这些信息。README 中明确列出了需要找到的四类端点:authorizationEndpoint、tokenEndpoint、jwksUri和issuer,"它们应该在身份提供商的文档中提供"。
| 需要收集的信息 | 用途 |
|---|---|
clientId/clientSecret | 在 OIDC 应用的详情页获取;前者用于标识客户端,后者用于向授权服务器认证客户端身份 |
authorizationEndpoint | 发起认证流程的端点 |
tokenEndpoint | 客户端用授权码换取 ID token 的端点 |
jwksUri | 获取身份提供商 JWKS(JSON Web Key Set)的地址,Logto 用它拉取公钥来校验 ID token |
issuer | 身份提供商的唯一标识,校验时与 JWT 的issclaim 比对 |
scope | 空格分隔的权限列表;如果需要调用 IdP 的 API 并持久化 token,还需加入对应的 API scope |
tokenEndpointAuthMethod(token 端点的客户端认证方式)不要凭猜测填写:README 建议查阅 OAuth 2.0 服务提供方 discovery 端点上的token_endpoint_auth_methods_supported字段,或参考该服务提供方的文档来确定支持哪些方式。
在 Logto Console 创建并配置 OIDC connector
在 Logto Console 中新建一个 OIDC connector,按下表填写配置。字段名以 Console 表单的 label 为准,来源是 constant.ts 中定义的表单项。
必填项:
| 字段 | 类型 | 说明 |
|---|---|---|
| Authorization Endpoint | 文本 | 认证发起端点 |
| Token Endpoint | 文本 | token 交换端点 |
| Client ID | 文本 | 客户端唯一标识 |
| Client Secret | 文本 | 客户端机密,README 强调它属于机密信息,需妥善保管 |
| Token Endpoint Auth Method | 下拉 | 可选client_secret_post、client_secret_basic、client_secret_jwt,默认client_secret_post |
| Scope | 多行文本 | 空格分隔。注意:按 OIDC 规范 scope 必须包含openid,如果漏填,Logto 会自动补上(见 types.ts 中的scopePostProcessor) |
| ID Token Verification Config | JSON | 至少包含jwksUri;Console 中该字段的默认模板为{ "jwksUri": "<jwks-uri>" },需替换为你身份提供商的实际 JWKS 地址 |
ID Token Verification Config的完整可选属性定义在 types.ts 的idTokenVerificationConfigGuard中:issuer、audience、algorithms、clockTolerance、maxTokenAge、subject、typ等均可选,只有jwksUri必填。README 也提醒这些属性的详细语义可参考 jose 库的JWTVerifyOptions文档。一个典型写法(尖括号内替换为你自己的端点):
{ "jwksUri": "https://<your-idp>/jwks", "issuer": "https://<your-idp>" }配置中有几个字段不需要你填,Logto 会固定或自动生成,理解这些规则能避免配置上的困惑(均来自 connector README):
- 出于安全考虑,只支持Authorization Code授权类型,不支持 implicit 和 hybrid flow;
responseType固定为code、grantType固定为authorization_code,两者自动填充;nonce不放在配置里,由 Logto 在每次认证请求中随机生成,并在回调时校验。
可选项(按需使用):
| 字段 | 适用条件 |
|---|---|
| Client Secret JWT Signing Algorithm | 仅当 Token Endpoint Auth Method 选client_secret_jwt时出现,可选HS256(默认)、HS384、HS512 |
| Authentication Request Optional Config | JSON。用于追加 OIDC Authentication Request 的可选参数:responseMode、display、prompt、maxAge、uiLocales、idTokenHint、loginHint、acrValues |
| Custom Config | JSON,Record<string, string>。当目标提供商在 OIDC 标准之外有自己的变体参数时,用它传递自定义参数;严格遵循标准的提供商无需理会 |
| Accept String-typed Boolean Claims | 开关,默认关闭。部分提供商会把email_verified、phone_verified等布尔 claim 返回成字符串,开启后会自动转换 |
| Trust Unverified Email | 开关,默认关闭。默认情况下email_verified缺失或为 false 时 email 不会同步到用户资料;仅在你确信该 IdP 提供的邮箱经过验证时才开启 |
关于资料同步的两个默认行为(来自 types.ts 中的实现):email 只有在email_verified为真(或开启了 Trust Unverified Email)时才会同步;phone 只有在phone_verified为真时才会同步。
此外还有两项不影响连接成功、但影响终端体验的通用设置:社交按钮的name与logo(支持明/暗两套),以及身份提供商名称(IdP name)——每个社交 connector 用唯一的 IdP name 区分用户身份。资料同步策略可选Only sync at sign-up(仅首次登录时拉取资料)或Always sync at sign-in(每次登录都更新)。
启用社交登录并验证结果
connector 创建完成后,按 README 的 "Utilize the OIDC connector" 一节把它接入终端用户流程:
- 进入 Logto Console 的Sign-in experience > Sign-up and sign-in页面;
- 在Social sign-in区域添加刚创建的 OIDC connector。
之后用真实用户账号走一次第三方登录。接入是否生效可以按这条路径核对(README "Manage user's social identity" 一节):
- 进入User management,打开登录用户的资料页;
- 在Social connections下找到对应的身份提供商条目并点击Manage;
- 该页面会展示这条社交连接、从社交账号授权并同步过来的全部资料,以及 access token 状态。
如果用户在登录时收到ID Token validation failed due to 'nonce' mismatch.这类报错,说明 ID token 校验失败,方向是核对该 connector 的jwksUri、issuer是否与身份提供商一致;源码中的处理逻辑见 index.ts(parseUserInfoFromIdToken)。另外 Logto 校验 ID token 时固定把audience设为你的clientId,即身份方签发的 ID token 受众必须是该 client。
边界与后续可选路径
- 只支持 Authorization Code 流程,implicit/hybrid 不可用;
- 如果希望应用还能在用户授权后代为调用 IdP 的 API:在
scope中加入所需 API scope,并在 connector 中开启Store tokens for persistent API access,Logto 会把 token 存入 Secret Vault;对标准 OAuth/OIDC 身份提供商,scope中还必须包含offline_access以获得 refresh token。token 的取用方式见 Logto 官方文档的 Secret Vault 指南(README 中的外链,仓库内不展开); - OIDC connector 也可以不开启社交登录,仅用于账户绑定(Account API)和 API 访问;
- 已知限制:部分 IdP 的 access token 响应不携带具体 scope 信息,Logto 无法直接展示用户授予的权限列表,但只要用户授权时同意了请求的 scope,应用调用 OIDC API 时即拥有对应权限。
【免费下载链接】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),仅供参考