Я настроил 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) {
...
}
У вас есть идеи, как решить проблему?