【问题标题】:How to use swagger with OAuth API?如何在 OAuth API 中使用 swagger?
【发布时间】:2013-02-14 21:22:19
【问题描述】:

是否可以将 swagger 用作使用 OAuth2 的 API 的文档/测试工具?我在 swagger 网站(或其他任何地方)上看不到任何东西。我见过的每种用法都使用 API 密钥、HTTP 基本或 cookie。

【问题讨论】:

    标签: swagger


    【解决方案1】:

    我一直在沿着同样的路线工作。 Swagger 将接受任何标头或 URL 定义的 api 密钥或令牌。向 api 和应用程序添加验证助手是一种标准方法。

    Oauth 确实需要 HTML 审查和/或登录才能启动握手认证过程。这意味着 swagger api 需要支持 Web 界面才能进行标准登录和范围接受。将 oauth 滚动到 swagger 会导致一些逻辑循环,长期不易支持。

    我们正在探索的另一种方法是让 api 为许多不同的 oauth 提供者处理和存储访问令牌; GitHub、推特和脸书。这也可能导致登录循环。

    【讨论】:

    • 感谢您的评论。听起来您是 swagger 开发团队的一员?是否有一些文档可以说明您的进度或过程?谢谢!
    【解决方案2】:

    迟到了,但 oAuth 支持现在在 swagger-core 的 1.3.0-RC1 中。支持oAuth的javascript库昨天在swagger-js发布。最后,swagger-ui 处于开发阶段,很快就会有 oAuth 隐式和服务器流程。

    【讨论】:

    • 非常感谢 - 迟到总比不出现好!这是一个了不起的消息。谢谢你,货运紧急港口人! :-)
    【解决方案3】:

    @fehguy 引用的博客文章http://developers-blog.helloreverb.com/enabling-oauth-with-swagger/ 显示了一个 java 代码示例,该示例将授权数据包含在由 swagger 生成的 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

    必须包含一个带有名为 Bootstrap(扩展 HttpServlet)的类的 Bean 和一个静态块!

    意见:也许 SwaggerConfig Scanner 从 Rest 类中的注释加载而不是 servlet 中的静态块会更“弹簧友好”。

    【讨论】:

    • 第一个链接失效了
    • 现在,还有另一种方法可以做到这一点。你使用什么版本的 swagger / spring?我可以尝试帮助..并更新我的答案..
    【解决方案4】:
    @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"));
            }
    
        }
    
    }
    

    【讨论】:

      【解决方案5】:

      来自mashery 的 IOdocs 似乎支持 OAuth,但它与 swagger(redis、node 等)有很大不同。它可以在github 上找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多