如果刷新请求出现 401 错误,Ktor Client 如何处理 Bearer Token 刷新逻辑中的死锁?

问题描述 投票:0回答:1

我在 Kotlin 应用程序中使用 Ktor 客户端(版本 3.0.0),并将其配置为使用 Bearer Token 授权机制。据我所知,只要在使用过期令牌的 API 调用过程中遇到 401 响应,Ktor 就会自动尝试通过发出 HTTP 请求来刷新访问令牌。

但是,我很好奇 Ktor 如何在刷新令牌请求本身收到 401 响应(例如,由于刷新令牌过期或无效)的情况下防止潜在的死锁。

我尝试阅读 Ktor 的官方文档,但没有找到有关刷新流程期间处理错误的具体信息。

任何见解或例子将不胜感激!

kotlin bearer-token ktor
1个回答
0
投票

实际上,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 = ""
            )
        }
    }

   }
© www.soinside.com 2019 - 2024. All rights reserved.