如何使用OAuth验证MicroProfile REST客户端调用?

时间:2020-03-31 20:26:32

标签: java kotlin quarkus microprofile quarkus-rest-client

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

我不想在拨打任何电话之前总是获得令牌,因此我需要一种机制来仅在还没有令牌或令牌过期时才检索新令牌。然后可以存储令牌并在每次调用中使用该令牌,直到令牌到期为止。对API的下一次调用会导致HTTP 401未经授权,然后将导致获取新令牌。

不幸的是,到目前为止,我还找不到任何有关如何使用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
}

2 个答案:

答案 0 :(得分:0)

正如与iabughosh讨论的那样,似乎没有自动完成我想做的事情的方法。相反,我是按照iabughosh的建议自己编写代码的。我采用了在呼叫中捕获错误的途径。如果错误的状态为401,则我将获取一个新令牌并重试该呼叫。

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

就目前而言,这似乎很好。当有很多(并行)调用时,我将不得不看看在生产中的结果。如果我找到了更好的解决方案,我将尝试记住该问题并进行相应的更新。

答案 1 :(得分:0)

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

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