Почему я получаю сообщение «Не удается прочитать с ошибки сервера» с помощью Swagger и OIDC? - PullRequest
1 голос
/ 24 марта 2019

Я добавил OIDC посредством вызова на сервер MITREid в другом домене для приложения swagger. Я установил URI перенаправления на http://localhost:8080/swagger-ui.html Когда я авторизуюсь, я получаю:

Can't read from server. It may not have the appropriate 
access-control-origin settings

ошибка.

Мой web-security-config:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Value("${security.activation.status}")
private boolean securityActivationStatus;

@Value("${security.user.name}")
private String builtinUserName;

@Value("${security.user.password}")
private String builtinPassword;

@Autowired
private OAuth2RestTemplate restTemplate;


 */
String[] apiPath = {
        "/v2/api-docs",
        "/configuration/ui",
        "/swagger-resources",
        "/configuration/security",
        "/swagger-ui.html",
        "/webjars/**"
};
    @Override
protected void configure(HttpSecurity http) throws Exception {
    System.out.println("securityActivationStatus=" + securityActivationStatus);
    if (!securityActivationStatus)
        http.authorizeRequests().anyRequest().permitAll();

    else {
        http
        .addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
        .addFilterAfter(myFilter(), OAuth2ClientContextFilter.class)
        .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/openid_connect_login"))
        .and()
        .authorizeRequests()
        .antMatchers(apiPath).permitAll()
        .antMatchers("/v1/**").authenticated();
    }




    http.csrf().disable();
    http.headers().frameOptions().disable();
}

@Bean
public OpenIdConnectFilter myFilter() {

    final OpenIdConnectFilter filter = new OpenIdConnectFilter("/openid_connect_login");
    filter.setRestTemplate(restTemplate);
    return filter;
}

POM включает в себя:

<properties>
        <springfox.version>2.7.0</springfox.version>
        <swagger.version>1.5.17</swagger.version>
        <swagger2markup.version>1.3.1</swagger2markup.version>
        <!-- For CheckStyle -->
        <linkXRef>false</linkXRef>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-security-oauth2.version>2.2.1.RELEASE</spring-security-oauth2.version>
        <spring-security-jwt.version>1.0.9.RELEASE</spring-security-jwt.version>
        <jwks-rsa.version>0.3.0</jwks-rsa.version>
        <mitreid-connect-version>1.3.1</mitreid-connect-version>
    </properties>

По моим исследованиям это может быть связано с CORS. Это похоже на вероятную проблему или в моем коде что-то не так? Если это CORS, можете ли вы указать мне правильное направление, как это отсортировать? Я полный нуб к чванству.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Если кому-то и поможет, то ответом будет /openid_connect_login неверный uri.

0 голосов
/ 24 марта 2019

Включите cors:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    final HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
    if (HttpMethod.OPTIONS.name().equalsIgnoreCase(((HttpServletRequest) req).getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    } else {
        chain.doFilter(req, res);
    }
}

@Override
public void destroy() {
}

@Override
public void init(FilterConfig config) throws ServletException {
}
}
...