更改 KTor 客户端中的身份验证凭据

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

如何更改 KTor 客户端中的凭据?

创建客户端时需要安装Auth功能。我稍后尝试过这样做,但似乎不起作用,无论是作为第一次设置还是重复。

文档建议在创建客户端后保留客户端,因为设置成本高昂,因此无法更改凭据似乎受到过度限制(而且 JetBrains 的聪明人肯定不会这样做)。

令我惊讶的是,我有一个有效的答案,但我不确定这是一个好的答案。欢迎评论。

因为文档说创建客户端很昂贵,所以我将其放入单例中,然后我做了这样的事情

@ThreadLocal Object ServerLink { fun setClient(id:String, pw:String) { // Create the client here and set id and pw } }
然后我只要需要就可以调用 ServerLink.setClient(newId, newPW) 。是的,这可行,而且我不认为我有多个线程,但这不会是内存泄漏,或者至少是内存浪费吗?

ktor
2个回答
1
投票
您可以通过获取对

Auth

 功能的引用并更改其提供者列表来做到这一点。以下是在创建客户端后更改基本身份验证凭据的示例:

val client = HttpClient(CIO) { install(Auth) { basic { username = "user" password = "password" } } } val auth = client.plugin(Auth) if (auth != null) { auth.providers.removeFirstOrNull() auth.basic { username = "new-user" password = "new-password" } } val r = client.get<String>("http://httpbin.org/basic-auth/new-user/new-password") println(r)
    

0
投票
在 ktor 版本 2.2.1 中,我成功地更新了不记名令牌凭证,如下所示:

const val REFRESH_TOKEN = "" // not required val client = HttpClient(CIO) { Auth { bearer { sendWithoutRequest { true } loadTokens { BearerTokens(initialToken, REFRESH_TOKEN) } } } } fun updateBearerCredentials(newToken: String) { client.plugin(Auth).bearer { loadTokens { BearerTokens(newToken, REFRESH_TOKEN) } } }
我认为基本身份验证也同样有效。不过还没有测试过。

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