当前位置: 首页 > 知识库问答 >
问题:

Spring OpenApi 3-如何设置clientId和clientSecret,以便在Swigger ui授权页面上自动显示?

微生鸿轩
2023-03-14

在我的Spring Boot应用程序上,我试图用OpenApi 3替换Swagger 2。在SwaggerConfiguration类的当前实现中,

@Configuration
@EnableSwagger2
public class SwaggerConfig {
...
@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .securitySchemes(Collections.singletonList(securityScheme()))
            .host(host)
            .securityContexts(Collections.singletonList(securityContext()));
}

@Bean
public SecurityConfiguration security() {
    return SecurityConfigurationBuilder.builder()
            .clientId(swaggerCredentialsProvider.getClientId())
            .clientSecret(swaggerCredentialsProvider.getClientSecret())
            .scopeSeparator(" ")
            .useBasicAuthenticationWithAccessCodeGrant(true)
            .build();
}

private SecurityScheme securityScheme() {
    GrantType grantType = new AuthorizationCodeGrantBuilder()
            .tokenEndpoint(new TokenEndpoint(tokenEndpoint, "code"))
            .tokenRequestEndpoint(new TokenRequestEndpoint(tokenRequestEndpoint,
                    swaggerCredentialsProvider.getClientId(),
                    swaggerCredentialsProvider.getClientSecret()))
            .build();

    return new OAuthBuilder().name("spring_oauth")
            .grantTypes(Collections.singletonList(grantType))
            .scopes(Arrays.asList(scopes())).build();
}
...
}

在这个示例代码中,我给出了clientId和clientSecret,它将自动显示在swagger ui授权页面上:

在我的OpenApi配置的新实现中

@Bean
public OpenAPI customOpenAPI() {
    OAuthFlow oAuthFlow = new OAuthFlow()
            .tokenUrl(tokenEndpoint)
            .authorizationUrl(tokenRequestEndpoint)
            .scopes(new Scopes().addString(scope, ""));
    return new OpenAPI()
            .components(new Components()
                    .addSecuritySchemes("security_auth", new SecurityScheme()
                            .flows(new OAuthFlows().authorizationCode(oAuthFlow))
                            .type(SecurityScheme.Type.OAUTH2).scheme("oauth2")))
            .info(new Info()
                    .title(appName)
                    .version(appVersion)
                    .description(appDescription));
}

我没有找到设置这些信息的方法。我试图在application.property文件中设置springdoc.swagger-ui.oauth.clientid,但是clientId没有显示。

如何使用OpenApi 3设置clientId和clientSecret,以便在授权页面上自动显示?

共有1个答案

左丘元徽
2023-03-14

您可以通过应用程序属性设置客户端id和客户端机密。我想你可能把客户id和客户机密的路径弄错了。属性是“客户端id”和“客户端机密”,而不是“clientId”和“clientSecret”

springdoc:
  swagger-ui:
    oauth:
      client-id: your-client-id-value
      client-secret: your-client-secret-value
 类似资料:
  • 我使用中的此选项在服务器中运行: 我得到这个错误: 分析INI配置文件时出错:未知的选项安全性。

  • 我可以看到一些贝宝付款已经完成使用贝宝clientId, ClientSecret而其他类型的付款通常nvp付款是使用用户名,密码和签名付款。使用客户端ID和秘密付款与使用用户名、密码和签名付款有什么区别。请对此作出解释。

  • 我在这里看到了一些有用的信息:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html,但没有看到将自定义设置为非敏感的特定方式。

  • 对于工作,我正在处理一个Java项目,我们需要将授权令牌传递给每个请求标头。 在我的文件中,我有以下内容: 这将启用一个”按钮,我可以单击该按钮: ...这会将令牌插入到每个请求的标头中。 然而,在Swagger文档或其他地方的示例中没有任何关于如何自动插入auth令牌的文档。目标是通过调用内部API(使用active directory进行身份验证)来检索身份验证令牌,并将该令牌自动应用于请求头

  • 我正在用Neon.2制作一个eclipse插件。这个插件有一个首选项页面,它也有一些eclipse帮助。我希望能够单击“首选项”对话框上的问号按钮,并使我的帮助出现在“首选项”对话框中,就像它为内置的首选项所做的那样。 在搜索了几个关于preferences系统和帮助系统的教程之后,我找不到一个如何实现这一点的示例。此外,搜索许多eclipse文档、wiki页面和源代码项目(如Java开发工具和其

  • 问题内容: 如何在用户端显示PHP代码。有点像w3School吗? 让我们说一个灰色区域div,然后在其中显示代码而不激活它吗? 问题答案: 您可以在html中使用html实体,它将呈现为<?php 您可以使用htmlspecialchars对代码进行编码以使用html实体。