initOAuth

suspend fun initOAuth(config: OAuthConfig, scope: String? = null): TokenInfo

使用 OAuth 初始化 SDK 完整的 OAuth 授权流程实现

官方文档:VDS 账户/VDS 账户快速接入(OAuth).md

OAuth 流程步骤:

  1. 创建 OAuthCallbackHandler(自动选择平台实现)

  2. 生成随机 state 参数(用于防止 CSRF 攻击)

  3. 如果启用了 PKCE,生成 code_verifier 和 code_challenge

  4. 构建授权 URL(调用 getOAuthAuthorizeUrl)

  5. 等待回调(handler 会自动打开浏览器)

  6. 验证 state 参数(确保回调来源可信)

  7. 使用授权码交换 access_token(调用 exchangeOAuthToken)

  8. 返回 TokenInfo 并更新内部状态

PKCE 支持:

  • 当 config.enablePkce = true 时启用 PKCE 流程

  • 自动生成 code_verifier(43-128 字符的随机字符串)

  • 计算 code_challenge(SHA256 哈希的 base64url 编码)

  • 在令牌交换时发送 code_verifier 进行验证

认证说明:

  • OAuth 流程从 SDK 配置自动获取 clientId 和 clientSecret

  • 无需在方法参数中传入

  • OAuth token(access_token)仅用于 getUserInfo() 接口

  • Client token(签名交换的 token)和 OAuth token 不通用

示例:

val oauthConfig = OAuthConfig(
callbackHost = "localhost",
callbackPort = 8080,
callbackPath = "/callback",
enablePkce = true // 启用 PKCE 增强安全性
)

val tokenInfo = authManager.initOAuth(oauthConfig, "user.profile")
println("访问令牌:${tokenInfo.accessToken}")
println("刷新令牌:${tokenInfo.refreshToken}")

Return

TokenInfo 包含访问令牌、刷新令牌和有效期信息

Parameters

config

OAuth 配置(包含回调主机、端口、超时等)

scope

可选的权限范围(如 "user.profile"),多个权限用空格分隔

See also

OAuth 配置数据类

回调处理器

Throws

当回调失败、state 验证失败或令牌交换失败时抛出

IllegalStateException

当 SDK 配置中缺少 clientId 时抛出