20

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

4

5 回答 5

5

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

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

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

于 2013-03-02T14:51:14.423 回答
5

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

于 2013-07-10T22:43:54.650 回答
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 中的静态块。

于 2015-01-13T13:54:01.190 回答
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"));
        }

    }

}
于 2015-12-01T12:29:44.690 回答
-1

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

于 2013-05-14T18:54:29.053 回答