Как мне получить пользовательский интерфейс Swagger, чтобы я мог предоставить заголовок аутентификации?
Я использовал Luminus вместе с reitit и swagger-ui для создания страницы, которая позволяет мне опробовать мой Luminus API. Я могу просто ввести тело запроса API и отправить его для тестирования API. Теперь я добавил аутентификацию с использованием приятеля, и мой API требует, чтобы токен был передан в заголовке запроса, иначе он отклоняет запрос как запрещенный.
Я пытаюсь заставить поле заголовков "Авторизация" волшебным образом появиться в моем пользовательском интерфейсе, чтобы я мог ввести строку токена JWT и протестировать свой API. Это должно быть очень распространенное требование для всех, кто создает API с помощью reitit, но я не могу понять, как это сделать. Я поискал и нашел эту страницу проблем с повторением, которая включает в себя текст...
Параметры заголовка объявляются как строчные строки {:headers {"авторизационная" строка?}}, Которые точно соответствуют тому, что нам предоставляет Ring. (Можно еще HTTP-Header-Case их для документации.)
... и предлагает настройку ниже...
:get {:summary "list offers"
:parameters
{:headers
{"authorization" string?}}
... etc
Это не дало мне возможности пройти аутентификацию. Итак, я нашел это обсуждение и отредактировал свои маршруты, добавив следующие параметры после: summary и: в указанном выше маршруте...
:middleware [authenticated?]
:swagger {:security [:apiKey]}
После добавления этого я получаю это...
... похоже, я на правильном пути, но у меня все еще нет возможности ввести свой токен в заголовок аутентификации.
Как я уже сказал, с curl все работает... Просто это чванство не показывает способа добавить заголовок auth. Кто-нибудь знает, как заставить Swagger UI подыгрывать в этом сценарии?
Если reitit не поддерживает это, то как люди используют пользовательский интерфейс Swagger для аутентифицированных запросов?
Любая помощь будет оценена по достоинству!
1 ответ
В ПОРЯДКЕ. Решил это.
В корне моих маршрутов API (инкапсулируя все маршруты, на которых я мог бы использовать эту аутентификацию) я добавляю:securityDefinitions.
["/api"
{:swagger {:id ::api
:securityDefinitions {:apiAuth
{:type "apiKey"
:name "Authorization"
:in "header"
}}}
Внутри конкретного маршрута:
:middleware [authenticated?]
:swagger {:security [{:apiAuth []}]}