跳到主要内容

设置 OAuth 2.0 协议社交登录

Logto 的官方 OAuth 2.0 协议连接器。

提示

在本指南中,我们假设你对 Logto 连接器 (Connectors) 有基本的了解。如果没有,请查看 配置连接器 指南以开始了解。

入门

OAuth 连接器使 Logto 能够连接到支持 OAuth 2.0 协议的任意社交身份提供商。

ℹ️ 注意

OAuth 连接器是 Logto 中一种特殊的连接器,你可以添加一些基于 OAuth 协议的连接器。

创建你的 OAuth 应用

当你打开此页面时,我们相信你已经知道要连接哪个社交身份提供商。首先要做的是确认身份提供商支持 OAuth 协议,这是配置有效连接器的前提。然后,按照身份提供商的说明注册并创建相关的 OAuth 授权应用。

配置你的连接器

出于安全考虑,我们仅支持“授权码”授权类型,它可以完美适应 Logto 的场景。

clientIdclientSecret 可以在你的 OAuth 应用详情页面找到。

clientId:客户端 ID 是一个唯一标识符,用于在注册时识别客户端应用程序。授权服务器使用此 ID 验证客户端应用程序的身份,并将任何授权的访问令牌与该特定客户端应用程序关联。

clientSecret:客户端密钥是授权服务器在注册期间发放给客户端应用程序的机密密钥。客户端应用程序使用此密钥在请求访问令牌时对授权服务器进行身份验证。客户端密钥被视为机密信息,应始终保持安全。

tokenEndpointAuthMethod:令牌端点认证方法由客户端应用程序用于在请求访问令牌时对授权服务器进行身份验证。要发现支持的方法,请查阅 OAuth 2.0 服务提供商的 OpenID Connect 发现端点中的 token_endpoint_auth_methods_supported 字段,或参考 OAuth 2.0 服务提供商提供的相关文档。

clientSecretJwtSigningAlgorithm (可选):仅当 tokenEndpointAuthMethodclient_secret_jwt 时需要。客户端密钥 JWT 签名算法由客户端应用程序用于签署在令牌请求期间发送给授权服务器的 JWT。

scope:权限参数用于指定客户端应用程序请求访问的资源和权限集。权限参数通常定义为一个以空格分隔的值列表,代表特定权限。例如,权限值 "read write" 可能表示客户端应用程序请求对用户数据的读写访问。

你需要在社交供应商的文档中找到 authorizationEndpointtokenEndpointuserInfoEndpoint

authenticationEndpoint:此端点用于启动认证过程。认证过程通常涉及用户登录并授权客户端应用程序访问其资源。

tokenEndpoint:此端点由客户端应用程序用于获取可用于访问请求资源的访问令牌。客户端应用程序通常向令牌端点发送带有授权类型和授权码的请求以接收访问令牌。

userInfoEndpoint:此端点由客户端应用程序用于获取有关用户的其他信息,例如他们的全名、电子邮件地址或个人资料图片。用户信息端点通常在客户端应用程序从令牌端点获取访问令牌后访问。

Logto 还提供了一个 profileMap 字段,用户可以自定义从社交供应商的个人资料中映射,这些通常不是标准的。键是 Logto 的标准用户资料字段名称,相应的值应该是社交资料的字段名称。在当前阶段,Logto 只关注社交资料中的 'id'、'name'、'avatar'、'email' 和 'phone',只有 'id' 是必需的,其他是可选字段。

responseTypegrantType 只能是授权码授权类型的固定值,因此我们将它们设为可选,默认值将自动填充。

例如,你可以找到 Google 用户资料响应,因此其 profileMap 应该是这样的:

{
"id": "sub",
"avatar": "picture"
}

ℹ️ 注意

我们提供了一个可选的 customConfig 键来放置你的自定义参数。 每个社交身份提供商可能在 OAuth 标准协议上有自己的变体。如果你想要的社交身份提供商严格遵循 OAuth 标准协议,那么你不需要关心 customConfig

配置类型

名称类型必需
authorizationEndpointstringtrue
userInfoEndpointstringtrue
clientIdstringtrue
clientSecretstringtrue
tokenEndpointResponseTypeenumfalse
responseTypestringfalse
grantTypestringfalse
tokenEndpointstringfalse
scopestringfalse
customConfigRecord<string, string>false
profileMapProfileMapfalse
ProfileMap 字段类型必需默认值
idstringfalseid
namestringfalsename
avatarstringfalseavatar
emailstringfalseemail
phonestringfalsephone

参考