跳到主要内容

核心 SDK 约定

基本约定

  • 核心部分应仅包含与平台无关的功能。
  • 核心部分应命名为 {$language} 并位于代码库的根目录下。例如,logto/js/jslogto/kotlin/kotlin
  • 核心包应在 Logto 范围内命名为 {$language}。例如,@logto/jsio.logto.sdk:kotlin

基本要求

任何核心 SDK 应包含:

  • 类型
  • 工具函数
  • 核心功能

类型

OidcConfigResponse

身份提供商 (IdP) 的配置,可以通过 /oidc/.well-known/openid-configuration API 获取。

属性

名称类型
authorizationEndpointstring
tokenEndpointstring
endSessionEndpointstring
revocationEndpointstring
jwksUristring
issuerstring
CodeTokenResponse

/oidc/token 的响应数据(通过授权码)。

属性

名称类型必需
accessTokenstring
refreshTokenstring
idTokenstring
scopestring
expiresInnumber
RefreshTokenResponse

通过刷新令牌刷新令牌时,/oidc/token 的响应数据(通过刷新令牌)。

属性

名称类型必需
accessTokenstring
refreshTokenstring
idTokenstring
scopestring
expiresInnumber
IdTokenClaims

ID 令牌携带的声明。

属性

名称类型必需
substring
audstring
expnumber
iatnumber
issstring
atHashstring
usernamestring
namestring
avatarstring

工具函数

generateCodeVerifier

生成一个代码验证器。
代码验证器的长度硬编码为 64。
返回值必须加密为 URL 安全的 base64 格式字符串。

参考

参数

无。

返回类型

string

generateCodeChallenge

基于代码验证器生成代码挑战。
此方法加密代码验证器,并以 URL 安全的 Base64 格式返回结果。
我们在 Logto V1 中将加密算法硬编码为 SHA-256

参考

参数

名称类型备注
codeVerifierstring由 generateCodeVerifier 生成

返回类型

string

generateState

"State" 用于防止 CSRF 攻击。
"State" 的长度硬编码为 64。
返回的结果字符串必须加密为 URL 安全的 base64 格式字符串。

参考

参数

无。

返回类型

string

decodeIdToken

解码一个 ID 令牌而不进行秘密验证。
返回一个 IdTokenClaims,其中包含所有在有效负载部分的令牌声明。

参数

名称类型
tokenstring

返回类型

IdTokenClaims

抛出

  • token 不是有效的 JWT。
verifyIdToken

验证一个 ID 令牌是否合法。

验证签名密钥

OIDC 支持 JSON Web Key Set。 此函数接受来自第三方库 (jose) 的 JsonWebKeySet 对象进行验证。

// JsonWebKeySet 示例
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "xxxx",
"e": "xxxx",
"n": "xxxx"
}
]
}

验证声明

  • 验证 ID 令牌中的 iss 是否与此令牌的发行者匹配。
  • 验证 aud(受众)声明是否等于客户端 ID。
  • 验证当前时间是否在过期时间之前。
  • 验证签发时间 (iat) 是否不超过当前时间的 +/- 1 分钟。

参考

参数

名称类型
idTokenstring
clientIdstring
issuerstring
jwksJsonWebKeySet

返回类型

void

抛出

  • 验证签名密钥失败
  • 验证声明失败
verifyAndParseCodeFromCallbackUri

验证登录回调 URI 是否合法,并返回从回调 URI 中提取的 code

验证回调 URI

  • 验证 callbackUri 应以 redirectUri 开头
  • 验证 callbackUri 中没有 error(参见 Error Response 中的重定向 URI)。
  • 验证 callbackUri 包含 state,应等于你在 generateSignInUri 中指定的 state 值。
  • 验证 callbackUri 包含参数值 code,你将在请求 /oidc/token(通过刷新令牌)时使用。

参数

名称类型
callbackUristring
redirectUristring
statestring

返回类型

string

抛出

  • 验证失败

核心功能

fetchOidcConfig

通过请求 /oidc/.well-known/openid-configuration 返回 OidcConfigResponse

参数

名称类型备注
endpointstringOIDC 服务端点

返回类型

OidcConfigResponse

抛出

  • 获取失败
generateSignInUri

参数

名称类型必需备注
authorizationEndpointstring
clientIdstring
redirectUristring
codeChallengestring
statestring
scopesstring[]实现可能会根据语言规范而有所不同。
resourcesstring[]实现可能会根据语言规范而有所不同。
promptstring默认值:consent

URL 将基于 authorizationEndpoint 生成,并包含以下查询参数:

登录 URL 查询参数

查询键必需备注
client_id
redirect_uri
code_challenge
code_challenge_method硬编码为 S256。
state
scopescope 始终包含 openid 和 offline_access,即使输入的 scope 提供了空或空的 scope 值。
resource我们可以多次将 resource 添加到 uri,后端会将它们转换为列表。例如 resource=a&resource=b
response_type硬编码为 code。
prompt

返回类型

string

generateSignOutUri

参数

名称类型必需
endSessionEndpointstring
idTokenstring
postLogoutRedirectUristring

要生成的 URL 将基于 endSessionEndpoint,并包含以下查询参数:

注销 URL 查询参数

查询键必需备注
id_token_hint输入的 idToken 参数
post_logout_redirect_uri输入的 postLogoutRedirectUri 参数

返回类型

string

fetchTokenByAuthorizationCode

通过请求 /oidc/token(通过授权码)获取令牌 (CodeTokenResponse)。

参数

名称类型必需
tokenEndpointstring
codestring
codeVerifierstring
clientIdstring
redirectUristring
resourcestring

HTTP 请求

  • 端点:/oidc/token
  • 方法:POST
  • 内容类型:application/x-www-form-urlencoded
  • 负载:
查询键类型必需
grant_typestring: 'authorization_code'
codestring
code_verifierstring
client_idstring
redirect_uristring
resourcestring

返回类型

CodeTokenResponse

抛出

  • 获取失败
fetchTokenByRefreshToken

通过 /oidc/token(通过刷新令牌)获取令牌 (RefreshTokenTokenResponse)。

参数

名称类型必需
tokenEndpointstring
clientIdstring
refreshTokenstring
resourcestring
scopesstring[]

HTTP 请求

  • 端点:/oidc/token
  • 方法:POST
  • 内容类型:application/x-www-form-urlencoded
  • 负载:
查询键类型必需备注
grant_typestring: 'refresh_token'
refresh_tokenstring
client_idstring
resourcestring
scopestring我们用空格连接 scopes 值来构造这个 scope 字符串

返回类型

RefreshTokenTokenResponse

抛出

  • 获取失败
revoke

请求 /oidc/token/revocation API 通知授权服务器先前获取的刷新或访问令牌不再需要。

参数

名称类型备注
revocationEndpointstring
clientIdstring
tokenstring要撤销的令牌

HTTP 请求

  • 端点:/oidc/token/revocation
  • 方法:POST
  • 内容类型:application/x-www-form-urlencoded
  • 负载:
查询键类型
client_idstring
tokenstring

返回类型

void

抛出

  • 撤销失败