在我的服务器应用程序中,我想使用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
}
答案 0 :(得分:0)
正如与iabughosh讨论的那样,似乎没有自动完成我想做的事情的方法。相反,我是按照iabughosh的建议自己编写代码的。我采用了在呼叫中捕获错误的途径。如果错误的状态为401,则我将获取一个新令牌并重试该呼叫。
当应用程序启动并且还没有令牌时,第一次调用总是导致401,然后我得到了第一个令牌。下一个401仅在令牌过期时才出现(或由服务器管理员过早删除),因此我仅获取令牌并再次进行调用。
就目前而言,这似乎很好。当有很多(并行)调用时,我将不得不看看在生产中的结果。如果我找到了更好的解决方案,我将尝试记住该问题并进行相应的更新。
答案 1 :(得分:0)
没有任何方法可以通过eclipse微配置文件在注释级别传递它,传递动态令牌的唯一方法是添加
@HeadParameter("Authorization") authString
在rest调用中,如果您使用的是jwt,通常可以注入JsonWebToken并对此对象进行所有检查,因此不需要该参数,但是,与添加其余参数相比,您可以添加它并忽略它客户方法声明中,您也必须添加它(正如我所见,您已经这样做了,只是确保参数的顺序是相同的),并且restclient将能够通过标头传递令牌(您需要传递“ Bearer“ + tokenString),但您需要访问其余服务的代码。