首页 > 解决方案 > 如何使用 OAuth 对 MicroProfile REST 客户端调用进行身份验证?

问题描述

在我的服务器应用程序中,我想使用 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
}

标签: javakotlinquarkusmicroprofilequarkus-rest-client

解决方案


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

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


推荐阅读