Получение 401 состояния ошибки из ответа swagger при обеспечении аутентификации с использованием oauth2 - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь настроить swagger с весенней безопасностью и oauth2.0 в своем приложении. Я создал все файлы, необходимые для этого, я могу получить access_token и также могу аутентифицироваться с использованием этого токена при попытке с почтальоном.

но теперь мне нужно сделать то же самое, используя чванство, и я получаю статус 401 и ошибка: «Auth ErrorTypeError: Не удалось получить» на swagger. также, когда я нажимаю кнопку аутентификации, я получаю параметры типа метода.

Я использовал фильтр Cors в своем приложении и удалил защиту для HttpMethod.options.

Почему я получаю эту ошибку? что я упустил в этом?

код сервера авторизации:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().and().cors().and()
                .authorizeRequests()
                .antMatchers("/login","/logout.do").permitAll()
                .antMatchers(HttpMethod.OPTIONS, 
                "/oauth/token").permitAll()
              // .antMatchers("/**").authenticated()
               .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginProcessingUrl("/login.do")
                .usernameParameter("username")
                .passwordParameter("password")
                .loginPage("/login")
                .and()
                .logout()
                .logoutRequestMatcher(new 
            AntPathRequestMatcher("/logout.do"))`enter code here`
           .and()
           .userDetailsService(userDetailsServiceBean());
    }

Сервер ресурсов:

 @Override

public void configure(HttpSecurity http) throws Exception{

    http
    .csrf().disable().authorizeRequests().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security",
            "/swagger-ui.html", "/webjars/**", "/swagger-resources/configuration/ui", "/swagger-ui.html",
            "/swagger-resources/configuration/security")
    .permitAll();


    http.csrf().and()
            //.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class)
            .authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/oauth/token").permitAll()
            .antMatchers(HttpMethod.GET, "/**").access("#oauth2.hasScope('read')")
            .antMatchers(HttpMethod.POST, "/**").access("#oauth2.hasScope('write')")
            .antMatchers(HttpMethod.PATCH, "/**").access("#oauth2.hasScope('write')")
            .antMatchers(HttpMethod.PUT, "/**").access("#oauth2.hasScope('write')")
            .antMatchers(HttpMethod.DELETE, "/**").access("#oauth2.hasScope('write')");

}

конфигурация чванства:

@Bean
public Docket edstrumentsApi() {
    List<ResponseMessage> list = new ArrayList<>();
    list.add(new ResponseMessageBuilder().code(500).message("500 message")
                     .responseModel(new ModelRef("Result")).build());
    list.add(new ResponseMessageBuilder().code(401).message("Unauthorized")
                     .responseModel(new ModelRef("Result")).build());
    list.add(new ResponseMessageBuilder().code(406).message("Not Acceptable")
                     .responseModel(new ModelRef("Result")).build());

    return new Docket(DocumentationType.SWAGGER_2)
                   .select().apis(RequestHandlerSelectors.basePackage("backend"))
                   .paths(PathSelectors.any())
                   .build()
                   .directModelSubstitute(LocalDate.class, String.class)
                   .genericModelSubstitutes(ResponseEntity.class)
                   .securitySchemes(Collections.singletonList(securitySchema()))
                   .securityContexts(Collections.singletonList(securityContext())).pathMapping("/")
                   .useDefaultResponseMessages(false).apiInfo(apiInfo()).globalResponseMessage(RequestMethod.GET, list)
                   .globalResponseMessage(RequestMethod.POST, list)
                   .apiInfo(apiInfo());
}

@Bean
public OAuth securitySchema() {

    List<AuthorizationScope> authorizationScopeList = new ArrayList();
    authorizationScopeList.add(new AuthorizationScope(Constants.SCOPE_READ, "read all"));
    authorizationScopeList.add(new AuthorizationScope(Constants.SCOPE_TRUST, "trust all"));
    authorizationScopeList.add(new AuthorizationScope(Constants.SCOPE_WRITE, "access all"));

    List<GrantType> grantTypes = new ArrayList();
    GrantType creGrant = new ResourceOwnerPasswordCredentialsGrant( "http://localhost:8081/oauth/token");
    grantTypes.add(creGrant);


    return new OAuth("oauth2schema", authorizationScopeList, grantTypes);
}

1 Ответ

0 голосов
/ 14 мая 2019

да я нашел причину ошибки. я создавал фильтр cors на стороне ресурса вместо сервера авторизации.

Вот почему я не смог получить запрос опции на сервере.

...