0

在我的服务器应用程序中,我想使用 MicroProfile REST 客户端使用一些第三方 API。为此,我需要发送一个Authorization带有不记名令牌的 Header。

我不想在进行任何调用之前总是获取令牌,因此我需要一种机制来仅在还没有令牌或令牌过期时才检索新令牌。然后可以在每次调用中存储和使用令牌,直到它过期。下一次调用会导致 HTTP 401 Unauthorized 的 API 将导致获得一个新的令牌。

不幸的是,到目前为止,我无法找到有关如何使用 MicroProfile REST 客户端使用 OAuth 安全 API 的任何资源。我希望任何人都可以给我任何提示。我正在使用 Kotlin 和 Quarkus,但 Java 相关文档也可以。任何事情都有帮助。

这是我相当简单的客户:

@RegisterRestClient
@Produces(MediaType.APPLICATION_JSON)
interface SomeThirdPartyApiClient {
    @POST
    @Path("/some/random/url")
    fun someRandomUrl(body: SomeJsonRequestObject, @HeaderParam("Authorization") bearer: String): SomeJsonResponseObject
}
4

2 回答 2

0

没有任何方法可以在注释级别通过 eclipse microprofile 配置传递它,传递动态令牌的唯一方法是添加

@HeadParameter("Authorization") authString 在您的休息调用中,如果您使用的是 jwt,通常您可以注入 JsonWebToken 并使用此对象进行所有检查,因此您不需要该参数,但是,您可以添加它并忽略,而不是在您休息时客户端方法声明你也必须添加它(正如我看到你的情况你已经这样做了,只需确保参数的顺序是相同的),并且restclient将能够通过标头传递令牌(你需要传递“ Bearer"+tokenString),但是你需要访问你的rest服务的代码。

于 2020-10-04T01:48:20.797 回答
0

正如与 iabughosh 讨论的那样,似乎没有自动的方式来做我想做的事情。相反,我按照 iabughosh 的建议自己编写了代码。我选择了在通话中捕捉错误的路线。如果错误状态为 401,那么我检索一个新令牌并重试调用。

当应用程序启动并且还没有令牌时,第一次调用总是会导致 401,然后我得到第一个令牌。下一个 401 仅在令牌过期(或被服务器管理员过早删除)时出现,所以我只需获取令牌并再次调用。

至于现在,这似乎工作得很好。当有很多(并行)调用时,我将不得不看看它在生产中的结果。如果我找到更好的解决方案,我会尝试记住这个问题并相应地更新它。

于 2020-04-05T18:55:41.677 回答