Stefan Oltmann
10/18/2021, 12:53 PMinvalid_grant
I guess I need to save the accessToken, correct?
Does someone have a demo how to do proper OAuth with Ktor?Hasan Hosgel (alosdev)
10/18/2021, 1:10 PMStefan Oltmann
10/18/2021, 1:11 PMHasan Hosgel (alosdev)
10/18/2021, 1:12 PMStefan Oltmann
10/18/2021, 1:13 PMHasan Hosgel (alosdev)
10/18/2021, 1:13 PMStefan Oltmann
10/18/2021, 1:15 PMHasan Hosgel (alosdev)
10/18/2021, 1:15 PMStefan Oltmann
10/18/2021, 1:16 PMHasan Hosgel (alosdev)
10/18/2021, 1:17 PMStefan Oltmann
10/18/2021, 1:19 PMHasan Hosgel (alosdev)
10/18/2021, 1:20 PMhttps://a.slack-edge.com/fbd3c/img/api/articles/oauth_scopes_tutorial/slack_oauth_flow_diagram.png▾
Stefan Oltmann
10/18/2021, 1:22 PMHasan Hosgel (alosdev)
10/18/2021, 1:32 PMStefan Oltmann
10/18/2021, 1:34 PMHasan Hosgel (alosdev)
10/18/2021, 1:36 PMAleksei Tirman [JB]
10/18/2021, 1:59 PMStefan Oltmann
10/18/2021, 2:27 PMAleksei Tirman [JB]
10/18/2021, 4:53 PMfun main() {
val authClient = HttpClient(CIO)
val client = HttpClient(CIO) {
install(Auth) {
lateinit var tokenInfo: TokenInfo
bearer {
loadTokens {
var token = getSavedToken()
if (token == null) {
token = authClient.requestToken()
// save token to database
}
BearerTokens(token.accessToken, token.refreshToken)
}
refreshTokens {
val info = authClient.refreshToken(tokenInfo.accessToken)
// save access token to database
BearerTokens(info.accessToken, tokenInfo.refreshToken)
}
}
}
}
}
data class TokenInfo(val accessToken: String, val refreshToken: String)
suspend fun HttpClient.requestToken(): TokenInfo {
return TokenInfo("access", "refresh")
}
suspend fun HttpClient.refreshToken(accessToken: String): TokenInfo {
return TokenInfo("access", "refresh")
}
suspend fun getSavedToken(): TokenInfo? {
return TokenInfo("access", "refresh")
}
Stefan Oltmann
10/19/2021, 6:32 AM