我在 Kotlin 应用程序中使用 Ktor 客户端(版本 3.0.0),并将其配置为使用 Bearer Token 授权机制。据我所知,只要在使用过期令牌的 API 调用过程中遇到 401 响应,Ktor 就会自动尝试通过发出 HTTP 请求来刷新访问令牌。
但是,我很好奇 Ktor 如何在刷新令牌请求本身收到 401 响应(例如,由于刷新令牌过期或无效)的情况下防止潜在的死锁。
我尝试阅读 Ktor 的官方文档,但没有找到有关刷新流程期间处理错误的具体信息。
任何见解或例子将不胜感激!
实际上,ktor 不会尝试自行发出请求并检索新的访问令牌,而是每当客户端发出请求并收到 401 状态代码时,都会调用 HttpClientConfiguration 中的 refreshTokens {} 块内的代码。
所以刷新代币的责任就委托给你来放入该区块
install(Auth) {
bearer {
refreshTokens {
// your logic hear and get the tokens
//the block has to end with the new tokens whether you retreived the access succesfully
//or also the refresh failed so they rbooth return to empty string
BearerTokens(
refreshToken = "",
accessToken = ""
)
}
}
}