Springfox Swagger SSO и вызывает другую пользовательскую функцию - PullRequest
0 голосов
/ 31 августа 2018

Я создал свою конфигурацию Swagger с SSO для моего сервера AD, как показано ниже. Когда пользователь нажимает кнопку авторизации, он может перейти в соответствующее место, чтобы выполнить аутентификацию, и получает id_token , перенаправляет и передает его swagger, где id_token будет передаваться по всем запросам API. заголовок как токен на предъявителя.

enter image description here

Все работает нормально, но проблема в том, что мне вместо id_token мне нужно передать другой токен в заголовок всех запросов API. У меня есть пользовательская функция с именем getApiTokens, которая выдает другой токен на основе id_token , переданного в качестве входного параметра. Вновь созданный токен, возвращаемый функцией getApiTokens, должен передаваться по всему заголовку API в качестве носителя

enter image description here

Может кто-нибудь помочь мне в этом

Я использую springfox-swagger2 для моего проекта

My SwaggerConfig.java код показан ниже

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Autowired
    private Configuration config;

    @Bean
    public Docket userApi() {
        final List<ResponseMessage> list = Lists.newArrayList();
        list.add(new ResponseMessageBuilder().code(401).message("Unauthorized").responseModel(new ModelRef("Result"))
                .build());;

        return new Docket(DocumentationType.SWAGGER_2).groupName("omnesys-api").apiInfo(apiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.omnesys.api")).paths(PathSelectors.any())
                .build().securitySchemes(newArrayList(oauth())).securityContexts(newArrayList(securityContext()))
                .globalResponseMessage(RequestMethod.GET, list).globalResponseMessage(RequestMethod.POST, list);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("Omnesys API")
                .description("Omnesys API")
                .termsOfServiceUrl("https://omnesys.com/service").contact(contact()).license("Apache License Version 2.0")
                .licenseUrl("https://omnesys.com/service/LICENSE").version("2.0").build();
    }

    private Contact contact() {
        return new Contact("Omnesys", "https://omnesys.com", "admin@omnesys.com");
    }

    @Bean
    SecurityContext securityContext() {
        final AuthorizationScope readScope = new AuthorizationScope("read", "read your admin");
        final AuthorizationScope[] scopes = new AuthorizationScope[1];
        scopes[0] = readScope;
        final SecurityReference securityReference = SecurityReference.builder().reference("omnesys_auth").scopes(scopes)
                .build();
        return SecurityContext.builder().securityReferences(newArrayList(securityReference)).build();
    }

    @Bean
    SecurityScheme oauth() {
        return new OAuthBuilder().name("omnesys_auth").grantTypes(grantTypes()).scopes(scopes()).build();
    }

    List<AuthorizationScope> scopes() {
        final List<AuthorizationScope> scopes = Lists.<AuthorizationScope>newArrayList();
        scopes.add(new AuthorizationScope("resource-access", "Get Resource Access"));
        return scopes;
    }

    List<GrantType> grantTypes() {
        final GrantType grantType = new ImplicitGrantBuilder()
                .loginEndpoint(
                        new LoginEndpoint(config.getSecurity().getOauth2().getClient().getUserAuthorizationUri()))
                .build();
        return newArrayList(grantType);
    }

    @Bean
    public SecurityConfiguration securityInfo() {
        return new SecurityConfiguration("97aaf5ff-b64d-4ec2-a409-b434d7744930", "d3cc95e9-6ed8-448f-a448-1ab02b72967e", "swagger", "swagger", "", ApiKeyVehicle.HEADER, "", " ");
    }
}
...