Comment utiliser swagger avec OAuth API?
est-il possible d'utiliser swagger comme outil de documentation/test pour les API qui utilisent OAuth2? Je ne vois rien sur le site swagger (ou ailleurs d'ailleurs). Chaque utilisation que j'ai vu utilise soit une clé API, HTTP basic, ou des cookies.
5 réponses
je travaille dans le même sens. Swagger accepte n'importe quel en-tête ou clé d'api définie par URL ou token. Ajouter un assistant de validation à l'api et à l'application est une approche standard.
Oauth ne nécessite une revue HTML et / ou une connexion pour démarrer le processus de poignée de main aouth. Cela signifie qu'une api swagger devra prendre en charge une interface web pour une connexion standard et une acceptation scope. Laminage de oauth en swagger résulte en quelques boucles logiques, qui à long terme ne sont pas faciles à soutien.
une approche différente que nous étudions est l'option de laisser l'api gérer et stocker les tokens d'accès pour un certain nombre de fournisseurs ouths différents; GitHub, twitter et Facebook. Cela pourrait aussi donner lieu à des boucles de connexion.
fin de la partie ici, mais oAuth est maintenant en 1.3.0-RC1 de swagger-core. La bibliothèque javascript qui peut supporter oAuth a été publiée hier en swagger-js. Enfin, le swagger-ui est en phase de développement, et aura bientôt un flux implicite et de serveur.
the blogs post http://developers-blog.helloreverb.com/enabling-oauth-with-swagger/ cité par @fehguy montre un exemple de code java pour inclure les données d'autorisation dans json générée par swagger, cependant ma question était où il devrait être inclus avec app avec Spring, JAXRS et CXF. Je ne l'ai pas trouvé dans L'échantillon CXF + JAXRS :https://github.com/swagger-api/swagger-core/tree/master/samples/java-jaxrs-cxf
Toutefois, la recherche d'un peu plus et gotcha !
est nécessaire inclure un haricot avec une classe appelée Bootstrap (extend HttpServlet) et un bloc statique !
Opinion: peut-être serait-il plus facile de charger à partir d'annotations par Scanner SwaggerConfig en classe de repos plutôt un bloc statique dans un servlet.
@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"));
}
}
}
IOdocs de mashery semble supporter OAuth, mais il est tout à fait différent de swagger (redis, noeud, etc.). Il est disponible sur github.