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.

18
demandé sur fool4jesus 2013-02-15 01:22:19

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.

5
répondu d1b1 2013-03-02 14:51:14

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.

5
répondu fehguy 2013-07-10 22:43:54

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 !

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

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.

3
répondu Eduardo Fabricio 2015-01-13 13:54:01
@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"));
        }

    }

}
0
répondu Vasilis Petropoulos 2015-12-01 12:54:50

IOdocs de mashery semble supporter OAuth, mais il est tout à fait différent de swagger (redis, noeud, etc.). Il est disponible sur github.

-1
répondu miguel laginha 2013-05-14 18:54:29