设置 OpenID Connect (OIDC) 社交登录
Logto 的 OpenID Connect (OIDC) 协议官方连接器。
在本指南中,我们假设你对 Logto 连接器 (Connectors) 有基本的了解。如果没有,请查看 配置连接器 指南以开始了解。
开始
OIDC 连接器使 Logto 能够连接到支持 OIDC 协议的任意社交身份提供商。
ℹ️ 注意
OIDC 连接器是 Logto 中的一种特殊连接器,你可以添加一些基于 OIDC 的连接器。
创建你的 OIDC 应用
当你打开此页面时,我们相信你已经知道要连接哪个社交身份提供商。首先要做的是确认身份提供商支持 OIDC 协议,这是配置有效连接器的前提。然后,按照身份提供商的说明注册并创建相关的 OIDC 授权应用。
配置你的连接器
出于安全考虑,我们仅支持 "Authorization Code" 授权类型,它可以完美适应 Logto 的场景。
clientId
和 clientSecret
可以在你的 OIDC 应用详情页面找到。
clientId:客户端 ID 是在注册时用于标识客户端应用程序的唯一标识符。授权服务器使用此 ID 验证客户端应用程序的身份,并将任何授权的访问令牌与该特定客户端应用程序关联。
clientSecret:客户端密钥是在注册时由授权服务器发放给客户端应用程序的机密密钥。客户端应用程序使用此密钥在请求访问令牌时对授权服务器进行身份验证。客户端密钥被视为机密信息,应始终保持安全。
tokenEndpointAuthMethod:令牌端点认证方法用于客户端应用程序在请求访问令牌时对授权服务器进行身份验证。要发现支持的方法,请查阅 OAuth 2.0 服务提供商的 OpenID Connect 发现端点中的 token_endpoint_auth_methods_supported
字段,或参考 OAuth 2.0 服务提供商提供的相关文档。
clientSecretJwtSigningAlgorithm (可选):仅在 tokenEndpointAuthMethod
为 client_secret_jwt
时需要。客户端密钥 JWT 签名算法用于客户端应用程序在令牌请求期间签署发送给授权服务器的 JWT。
scope:权限参数用于指定客户端应用程序请求访问的资源和权限集。权限参数通常定义为一个以空格分隔的值列表,代表特定权限。例如,权限值 "read write" 可能表示客户端应用程序请求对用户数据的读写访问。
你需要找到 authorizationEndpoint
、tokenEndpoint
、jwksUri
和 issuer
作为 OpenID 提供商的配置信息。它们应该在社交供应商的文档中可用。
authenticationEndpoint:此端点用于启动认证过程。认证过程通常涉及用户登录并授权客户端应用程序访问其资源。
tokenEndpoint:此端点用于客户端应用程序获取可用于访问请求资源的 ID 令牌。客户端应用程序通常向令牌端点发送带有授权类型和授权码的请求以接收 ID 令牌。
jwksUri:这是可以获取社交身份提供商 (简称 IdP) 的 JSON Web Key Set (JWKS) 的 URL 端点。JWKS 是一组加密密钥,IdP 用于签署和验证在认证过程中发放的 JSON Web Tokens (JWTs)。jwksUri
由依赖方 (RP) 用于获取 IdP 用于签署 JWTs 的公钥,以便 RP 可以验证从 IdP 接收到的 JWTs 的真实性和完整性。
issuer:这是 IdP 的唯一标识符,RP 用于验证从 IdP 接收到的 JWTs。它包含在 JWTs 中作为 iss
声明(ID 令牌始终是 JWT)。发行者值应与 IdP 的授权服务器的 URL 匹配,并且应为 RP 信任的 URI。当 RP 接收到 JWT 时,它会检查 iss
声明以确保它是由受信任的 IdP 发放的,并且 JWT 是用于与 RP 一起使用的。
jwksUri
和 issuer
一起为 RP 在认证过程中验证最终用户身份提供了安全机制。通过使用从 jwksUri
获取的公钥,RP 可以验证 IdP 发放的 JWTs 的真实性和完整性。发行者值确保 RP 仅接受由受信任的 IdP 发放的 JWTs,并且 JWTs 是用于与 RP 一起使用的。
由于认证请求始终是必需的,因此提供了 authRequestOptionalConfig
来包装所有可选配置,你可以在 OIDC 认证请求 中找到详细信息。你可能还会发现此配置中缺少 nonce
。由于 nonce
应该对每个请求都是唯一的,我们将 nonce
的生成放在代码实现中。所以不用担心!前面提到的 jwksUri
和 issuer
也包含在 idTokenVerificationConfig
中。
你可能会好奇为什么标准的 OIDC 协议支持隐式和混合流,而 Logto 连接器仅支持授权流。已确定隐式和混合流比授权流安全性较低。由于 Logto 专注于安全性,它仅支持授权流,以为用户提供最高级别的安全性,尽管其便利性略低。
responseType
和 grantType
在 "Authorization Code" 流中只能是固定值,因此我们将它们设为可选,默认值将自动填充。
ℹ️ 注意
对于所有流类型,我们提供了一个可选的
customConfig
键来放置你的自定义参数。 每个社交身份提供商可能在 OIDC 标准协议上有自己的变体。如果你想要的社交身份提供商严格遵循 OIDC 标准协议,那么你不需要关心customConfig
。
配置类型
名称 | 类型 | 必需 |
---|---|---|
scope | string | 是 |
clientId | string | 是 |
clientSecret | string | 是 |
authorizationEndpoint | string | 是 |
tokenEndpoint | string | 是 |
idTokenVerificationConfig | IdTokenVerificationConfig | 是 |
authRequestOptionalConfig | AuthRequestOptionalConfig | 否 |
customConfig | Record<string, string> | 否 |
AuthRequestOptionalConfig 属性 | 类型 | 必需 |
---|---|---|
responseType | string | 否 |
tokenEndpoint | string | 否 |
responseMode | string | 否 |
display | string | 否 |
prompt | string | 否 |
maxAge | string | 否 |
uiLocales | string | 否 |
idTokenHint | string | 否 |
loginHint | string | 否 |
acrValues | string | 否 |
IdTokenVerificationConfig 属性 | 类型 | 必需 |
---|---|---|
jwksUri | string | 是 |
issuer | string | string[] | 否 |
audience | string | string[] | 否 |
algorithms | string[] | 否 |
clockTolerance | string | number | 否 |
crit | Record<string, string | boolean> | 否 |
currentDate | Date | 否 |
maxTokenAge | string | number | 否 |
subject | string | 否 |
typ | string | 否 |
在 这里 查看有关 IdTokenVerificationConfig
的更多详细信息。