如何解决在使用 SpringFox 的 Swagger Docket 配置中忽略 OAuth2 SecurityReference AuhtorizationScope
我在为 Swagger 设置文档时遇到了在安全参考中使用 AuthorizationScope 的问题或误解。
我希望 SecurityScheme 的 AuthorizationScope 将由 SecurityReference 强制执行,但实际上它被忽略了 - 这意味着从使用 SecurityScheme 和 SecurityReference 的文档中调用我的 API 没有问题,尽管如下:
记录
public static Docket createOauth2Docket(final ApiInfo apiInfo,final String groupName,final String basePackage,final String urlPrefix,final TypeResolver typeResolver) {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo)
.securityContexts(Collections.singletonList(oauth2SecurityContext()))
.securitySchemes(Collections.singletonList(oauth2SecurityScheme()))
.groupName(groupName)
.useDefaultResponseMessages(false)
.globalResponses(HttpMethod.GET,getDefaultResponses())
.globalResponses(HttpMethod.POST,getDefaultResponses())
.globalResponses(HttpMethod.PUT,getDefaultResponses())
.globalResponses(HttpMethod.PATCH,getDefaultResponses())
.globalResponses(HttpMethod.DELETE,getDefaultResponses())
.directModelSubstitute(LocalDate.class,String.class)
.directModelSubstitute(LocalTime.class,String.class)
.directModelSubstitute(LocalDateTime.class,String.class)
.directModelSubstitute(Instant.class,String.class)
.directModelSubstitute(OffsetTime.class,String.class)
.directModelSubstitute(OffsetDateTime.class,String.class)
.directModelSubstitute(zoneddatetime.class,String.class)
.additionalModels(typeResolver.resolve(ErrorInfo.class))
.genericModelSubstitutes(DeferredResult.class)
.select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.paths(PathSelectors.ant(urlPrefix + "/**"))
.build();
}
文档的安全设置
private static SecurityScheme oauth2SecurityScheme() {
return OAuth2Scheme.OAUTH2_PASSWORD_FLOW_BUILDER
.tokenUrl("https://****/protocol/openid-connect/token")
.name("OAUTH2")
.scopes(Collections.singletonList(new AuthorizationScope("openid","accessEverything")))
.build();
}
private static SecurityContext oauth2SecurityContext() {
return SecurityContext.builder().securityReferences(Collections.singletonList(oauth2SecurityReference())).build();
}
private static SecurityReference oauth2SecurityReference() {
AuthorizationScope[] authScopes = new AuthorizationScope[1];
authScopes[0] = new AuthorizationScopeBuilder()
.scope("whatever")
.description("accessEverything")
.build();
return SecurityReference.builder()
.reference("OAUTH2")
.scopes(authScopes)
.build();
}
在 swagger 中,一切看起来都很好。可以选择范围并通过单击授权按钮从 SSO 获取令牌并正确发送到标头中的授权对象,前缀为 Bearer,API 返回 200。由于范围值不同,我预计会有 40 倍的未授权响应。
能否请您说明为什么会出现这种行为,或者我的期望有什么问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。