Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

сообщение в блоге http://developers-blog.helloreverb.com/enabling-oauth-with-swagger/, цитируемое @fehguy, показывает пример java-кода для включения данных авторизации в json, сгенерированных swagger, однако мой вопрос заключался в том, где он должен быть включен в приложение с Spring, JAXRS и CXF. Я не нашел его в примере CXF + JAXRS: https://github.com/swagger-api/swagger-core/tree/master/samples/java-jaxrs-cxf

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

https://github.com/swagger-api/swagger-core/blob/master/samples/java-jersey-spring/src/main/resources/beans-asset-ws.xml

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

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

Ответ 4

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

Ответ 5

@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"));
        }

    }

}