我在我的 kotlin Ktor 后端实现了 OAuth 授权。
使用时grant_type = client_credentials
,一切都按预期工作。
但是,在使用时grant_type = password
,它甚至不执行loadTokens
.
loadTokens
示例中的断点client_credentials
确实命中,在密码示例中,loadTokens
命中了几次但内部没有。tokenClient
即使配置了日志级别,第二个示例中也没有记录身份验证请求。
这个有效:
if (user == null) {
loadTokens {
val tokens = tokenClient.submitForm<FaOAuthResult>("https://sandbox.xxx.io/oauth/token",
Parameters.build {
append("grant_type", "client_credentials")
append("client_id", "xxx")
append("client_secret", "xxx")
})
BearerTokens(
accessToken = tokens.access_token,
refreshToken = tokens.access_token
)
}
而这个没有:
else {
loadTokens {
val tokens =
tokenClient.submitForm<FaOAuthResult>("https://sandbox.xxx.io/oauth/token",
Parameters.build {
append("grant_type", "password")
append("client_id", "xxx")
append("client_secret", "xxx")
append("username", user.finapiUserId!!)
append("password", user.finapiPassword!!)
})
BearerTokens(
accessToken = tokens.access_token,
refreshToken = tokens.access_token
)
}