Можно ли использовать swagger в качестве инструмента для документирования/тестирования API-интерфейсов, которые используют OAuth2? Я ничего не вижу на сайте swagger (или где-нибудь еще в этом отношении). Каждое использование, которое я видел, использует либо ключ API, HTTP basic, либо файлы cookie.
Как использовать swagger с API OAuth?
Ответ 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
Однако, вы ищете немного больше и получите!
Необходимо включить 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"));
}
}
}