【发布时间】:2013-02-14 21:22:19
【问题描述】:
是否可以将 swagger 用作使用 OAuth2 的 API 的文档/测试工具?我在 swagger 网站(或其他任何地方)上看不到任何东西。我见过的每种用法都使用 API 密钥、HTTP 基本或 cookie。
【问题讨论】:
标签: swagger
是否可以将 swagger 用作使用 OAuth2 的 API 的文档/测试工具?我在 swagger 网站(或其他任何地方)上看不到任何东西。我见过的每种用法都使用 API 密钥、HTTP 基本或 cookie。
【问题讨论】:
标签: swagger
我一直在沿着同样的路线工作。 Swagger 将接受任何标头或 URL 定义的 api 密钥或令牌。向 api 和应用程序添加验证助手是一种标准方法。
Oauth 确实需要 HTML 审查和/或登录才能启动握手认证过程。这意味着 swagger api 需要支持 Web 界面才能进行标准登录和范围接受。将 oauth 滚动到 swagger 会导致一些逻辑循环,长期不易支持。
我们正在探索的另一种方法是让 api 为许多不同的 oauth 提供者处理和存储访问令牌; GitHub、推特和脸书。这也可能导致登录循环。
【讨论】:
迟到了,但 oAuth 支持现在在 swagger-core 的 1.3.0-RC1 中。支持oAuth的javascript库昨天在swagger-js发布。最后,swagger-ui 处于开发阶段,很快就会有 oAuth 隐式和服务器流程。
【讨论】:
@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
但是,寻找更多并得到了!
必须包含一个带有名为 Bootstrap(扩展 HttpServlet)的类的 Bean 和一个静态块!
意见:也许 SwaggerConfig Scanner 从 Rest 类中的注释加载而不是 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"));
}
}
}
【讨论】: