Нужно ли настраивать Angular 4, когда Spring Boot настроен для oAuth2? - PullRequest
0 голосов
/ 04 декабря 2018

Я настроил Spring Boot, чтобы использовать oAuth2 для соединения с keycloak, а затем получить информацию о пользователе.Все работает нормально при использовании почтальона, но когда я пытаюсь использовать API от Angular, что-то не так.

Ошибка: ошибка (в обещании): HttpErrorResponse: {"headers": {"normalizedNames": {}, "lazyUpdate": null, "headers": {}}, "status": 0, "statusText": "Unknown Error", "url": null, "ok": false, "name": "HttpErrorResponse "," message ":" Реакция отказа Http для (неизвестный URL): 0 Неизвестная ошибка "," ошибка ": {" isTrusted ": true}}

EDIT1:

Конфигурация Http:

    @Override
    public void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.csrf().disable().cors().and()
                .authorizeRequests()
                .antMatchers("/*.js", "/*.css","/*.woff2").permitAll()
                .anyRequest().authenticated().and().formLogin().disable()
                .oauth2Login()
                .loginPage(DEFAULT_AUTHORIZATION_REQUEST_BASE_URI + "/" + realm);

Конфигурация Cors:

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    final CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("*"));
    configuration.setAllowCredentials(true);
    configuration.setAllowedHeaders(Arrays.asList("*"));
    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Application.properties для keycloak и oauth2:

kc.base-url=http://localhost:8180/auth
kc.realm=my-realm
kc.realm-url=${kc.base-url}/realms/${kc.realm}

spring.security.oauth2.client.registration.my-realm.client-id=clientId
spring.security.oauth2.client.registration.my-realm.client-name=clientId
spring.security.oauth2.client.registration.my-realm.client-secret=12345678-1234-1234-1234-123456723
spring.security.oauth2.client.registration.my-realm.provider=keycloak
spring.security.oauth2.client.registration.my-realm.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.my-realm.scope=email,profile,openid
spring.security.oauth2.client.registration.my-realm.redirect-uri-template=http://localhost:8080/login/oauth2/code/${kc.realm}
spring.security.oauth2.client.provider.keycloak.authorization-uri=${kc.realm-url}/protocol/openid-connect/auth
spring.security.oauth2.client.provider.keycloak.jwk-set-uri=${kc.realm-url}/protocol/openid-connect/certs
spring.security.oauth2.client.provider.keycloak.user-info-uri=${kc.realm-url}/protocol/openid-connect/userinfo
spring.security.oauth2.client.provider.keycloak.token-uri=${kc.realm-url}/protocol/openid-connect/token
spring.security.oauth2.client.provider.keycloak.user-name-attribute=email

Угловой запрос:

public getUserDetails() {
return this.httpClient.get<UserDetails>(environment.backendServerAddress + '/user/getUserCache')
    .map(response => response).toPromise();}

api весенней загрузки:

@RequestMapping(value="/getUserCache", method = RequestMethod.GET)
public ResponseEntity getUserCache(Principal principal) {
...
}

У вас есть идеи, как решить проблему?

...