我正在构建一些Swagger文档,一切都很好,除了我想让页面以交互方式工作,所以当选择编辑器或UI时,如果我点击授权按钮,我会调用我的身份验证URL然后在后续请求中使用的JWT令牌。
我计划向API客户端发布Api访问密钥和秘密访问密钥,并希望点击将处理这些并构建JWT令牌的身份验证页面。
令我感到震惊的是,如果我能够在Swagger中获得如何实现这一目标的正确定义,那么我将拥有一个现成的测试客户端,然后使用我的新代码。
是的,这是我第一次使用JWT,而我还没有构建代码。你能说" API-First"?
答案 0 :(得分:4)
这就是我使用Swagger和JWT身份验证的方式:
在swagger.yaml根级别:
securityDefinitions:
JWT:
type: apiKey
in: header
name: access_token
在swagger.yaml路径中:
security
-JWT: []
这将在浏览器的Swagger UI中显示“授权”按钮。
希望这可以帮助别人。
答案 1 :(得分:0)
Swagger可以保存令牌并将令牌自动应用于所有请求。
这是您需要添加到Swagger Docket配置中的内容:
@Bean
public Docket newsApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.securitySchemes(Lists.newArrayList(apiKey()))
.securityContexts(Lists.newArrayList(securityContext()))
.apiInfo(generateApiInfo());
}
@Bean
SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.any())
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope
= new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(
new SecurityReference("JWT", authorizationScopes));
}
private ApiKey apiKey() {
return new ApiKey("JWT", "Authorization", "header");
}
当您加载Swagger UI时,您将能够看到Authorize按钮。
您可以保存令牌,请确保在令牌前面添加“承载者”。