init OAuth
使用 OAuth 初始化 SDK 完整的 OAuth 授权流程实现
官方文档:VDS 账户/VDS 账户快速接入(OAuth).md
OAuth 流程步骤:
创建 OAuthCallbackHandler(自动选择平台实现)
生成随机 state 参数(用于防止 CSRF 攻击)
如果启用了 PKCE,生成 code_verifier 和 code_challenge
构建授权 URL(调用 getOAuthAuthorizeUrl)
等待回调(handler 会自动打开浏览器)
验证 state 参数(确保回调来源可信)
使用授权码交换 access_token(调用 exchangeOAuthToken)
返回 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
OAuth 配置(包含回调主机、端口、超时等)
可选的权限范围(如 "user.profile"),多个权限用空格分隔
See also
Throws
当回调失败、state 验证失败或令牌交换失败时抛出
当 SDK 配置中缺少 clientId 时抛出