Как аутентифицировать клиентские вызовы MicroProfile REST с помощью OAuth? - PullRequest
0 голосов
/ 31 марта 2020

В моем серверном приложении я хочу использовать какой-нибудь сторонний API, используя клиент REST MicroProfile. Для этого мне нужно отправить Authorization заголовок с токеном на предъявителя.

Я не хочу всегда получать токен перед тем, как сделать какой-либо вызов, поэтому мне нужен механизм для извлечения только нового токена если токена еще нет или токен истек. Затем токен может быть сохранен и использован в каждом вызове до истечения срока его действия. Следующий вызов API, который вызовет HTTP 401 Unauthorized, должен привести к получению нового токена.

К сожалению, до сих пор я не смог найти какие-либо ресурсы о том, как использовать защищенные API OAuth с использованием MicroProfile REST клиент. Я надеюсь, что кто-нибудь может дать мне какие-либо советы. Я использую Kotlin и Quarkus, но документация, связанная с Java, тоже подойдет. Все помогает.

Вот мой довольно простой клиент:

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

1 Ответ

0 голосов
/ 05 апреля 2020

Как обсуждалось с iabugho sh, похоже, что нет автоматического c способа сделать то, что я хочу сделать. Вместо этого я сам написал код в соответствии с предложением iabugho sh. Я пошел с маршрутом отлова ошибок в вызове. Если ошибка имеет статус 401, я получаю новый токен и повторяю вызов.

Когда приложение запускается и токена еще нет, первый вызов всегда вызывает 401, а затем я получаю первый токен. Следующее значение 401 появляется только после истечения срока действия токена (или преждевременного удаления администратором сервера), поэтому я просто получаю токен и снова выполняю вызов.

На данный момент, похоже, все работает отлично. Я должен увидеть, как это получается в производстве, когда есть много (параллельных) вызовов. Если я найду лучшее решение, я постараюсь запомнить этот вопрос и соответствующим образом обновить его.

...