Как мне получить пользовательский интерфейс 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 []}]}
Другие вопросы по тегам