2013-02-14 7 views
17

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

ответ

5

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

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

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

+0

Благодарим за обсуждение. Похоже, вы являетесь частью команды разработчиков чванства? Есть ли какая-то документация, которая говорит о вашем прогрессе или процессе? Благодаря! – fool4jesus

0

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

5

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

+0

Большое спасибо - поздно вечеринке намного лучше, чем никогда! Это потрясающая новость. Благодарю вас! :-) – fool4jesus

3

в blog's размещать http://developers-blog.helloreverb.com/enabling-oauth-with-swagger/ цитируется @fehguy показан пример кода Java, чтобы включить данные авторизации в формате JSON, порожденной развязностью, однако мой вопрос был, где он должен быть включен в приложении с 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 (распространяется HttpServlet) и статический блок!

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

+6

Первая ссылка мертва – Andrii

+0

Сегодня, есть еще один способ сделать это .. какую версию swagger/spring вы используете? Я могу попробовать помочь .. и обновить свой ответ .. –

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

    } 

}