Как использовать swagger с API OAuth?

17

Можно ли использовать swagger в качестве инструмента для документирования / тестирования API-интерфейсов, которые используют OAuth2? Я ничего не вижу на сайте swagger (или где-нибудь еще в этом отношении). Каждое использование, которое я видел, использует либо ключ API, HTTP basic, либо файлы cookie.

    
задан fool4jesus 14.02.2013 в 22:22
источник

5 ответов

5

Я работал так же. Swagger будет принимать любой заголовок или URL-адрес api-ключа или токена. Добавление помощника проверки подлинности в api и app является стандартным подходом.

Oauth действительно требует просмотра HTML и / или входа, чтобы начать процесс рукопожатия. Это означает, что apache swagger должен поддерживать веб-интерфейс для стандартного входа и приема. Перемещение oauth в swagger приводит к нескольким логическим циклам, которые долгое время нелегко поддерживать.

Другой подход, который мы изучаем, - это возможность разрешить дескриптор api и хранить токены доступа для нескольких разных поставщиков oauth; GitHub, Twitter и Facebook. Это может также привести к логическим циклам.     

ответ дан d1b1 02.03.2013 в 15:51
  • Спасибо за комментирование. Похоже, вы являетесь частью команды разработчиков чванства? Есть ли какая-то документация, которая говорит о вашем прогрессе или процессе? Благодаря! –  fool4jesus 03.03.2013 в 18:38
5

поздно, но поддержка oAuth теперь находится в 1.3.0-RC1 swagger-core . Библиотека javascript, которая может поддерживать oAuth, была выпущена вчера в swagger-js . Наконец, swagger-ui находится в стадии разработки и вскоре будет иметь неявный и серверный сервер поток.     

ответ дан fehguy 11.07.2013 в 00:43
  • Большое спасибо - поздно вечеринке намного лучше, чем никогда не появляться! Это потрясающая новость. Благодарю вас! :-) –  fool4jesus 12.07.2013 в 04:29
3

сообщение в блоге Ссылка , цитируемое @fehguy, показывает пример Java-кода чтобы включить данные авторизации в json, созданный swagger, однако мой вопрос заключался в том, где он должен быть включен в приложение с Spring, JAXRS и CXF. Я не нашел его в примере CXF + JAXRS: Ссылка

Однако, вы ищете немного больше и получите!

Ссылка

Необходимо включить Bean с классом Bootstrap (extends HttpServlet) и статическим блоком!

Мнение: Возможно, это было бы более «дружественным к весне», загруженным из аннотаций SwaggerConfig Scanner в классе Rest вместо статического блока в сервлете.

    
ответ дан Eduardo Fabricio 13.01.2015 в 14:54
  • Первая ссылка мертва –  Andrii 06.01.2017 в 21:43
  • В настоящее время есть другие способы сделать это. Какую версию swagger / spring вы используете? Я могу попробовать помочь .. и обновить свой ответ .. –  Eduardo Fabricio 09.01.2017 в 19:31
0

IOdocs из mashery , похоже, поддерживает OAuth, но он сильно отличается от swagger (redis, node и т. д.). Он доступен в github .

    
ответ дан miguel laginha 14.05.2013 в 20:54
0
@Configuration
public class SwaggerConfiguration {

    @Bean
    @DependsOn("jaxRsServer") //org.apache.cxf.endpoint.Server bean
    public ServletContextInitializer initializer() {
        return new ServletContextInitializer() {
            @Override
            public void onStartup(ServletContext servletContext) throws ServletException {
                BeanConfig scanner = (BeanConfig) ScannerFactory.getScanner();
                Swagger swagger = scanner.getSwagger();
                servletContext.setAttribute("swagger", swagger);
            }
        };
    }

    @Bean
    public Feature swaggerFeature() {
        XSwagger2Feature feature = new XSwagger2Feature();

        return feature;
    }

    @Bean
    public FilterRegistrationBean swaggerApiFilter() {
        ApiOriginFilter filter = new ApiOriginFilter();

        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(filter);
        registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);

        return registrationBean;
    }

    public static class XSwagger2Feature extends Swagger2Feature {

        @Override
        protected void addSwaggerResource(Server server) {
            super.addSwaggerResource(server);

            BeanConfig scanner = (BeanConfig) ScannerFactory.getScanner();
            Swagger swagger = scanner.getSwagger();
            swagger.securityDefinition("api_key", new ApiKeyAuthDefinition("api_key", In.HEADER));
            swagger.securityDefinition("petstore_auth", 
              new OAuth2Definition()
                .implicit("http://petstore.swagger.io/api/oauth/dialog")
                .scope("read:pets", "read your pets")
                .scope("write:pets", "modify pets in your account"));
        }

    }

}
    
ответ дан Vasilis Petropoulos 01.12.2015 в 13:29