Przeszukałem internet pod kątem rozwiązania tego problemu, ale nie znalazłem żadnego działającego rozwiązania. Próbuję skonfigurować podstawowego dostawcę autoryzacji Spring Boot OAuth2 i klienta.Spring Boot OAuth2 - Nie można uzyskać danych użytkownika z tokena
Śledziłem oficjalne instrukcje Spring Boot i stworzyłem pojedyncze logowanie na Facebooku i Githubie. Następnie postępowałem zgodnie z instrukcjami, aby utworzyć bezpieczną aplikację Spring Boot Web.
Chciałem stworzyć swój własny Serwer autoryzacji, więc dodałem adnotację @EnableAuthorizationServer do Bezpiecznej aplikacji internetowej, jak wyjaśniono here. Dodałem również szczegóły klienta OAuth2 zgodnie z opisem w łączu. Postępowałem zgodnie z dalszymi instrukcjami i utworzyłem klienta OAuth2.
Uruchamiam obie aplikacje, odwiedzam 127.0.0.1:9999, aby otworzyć klienta, klient przekierowuje mnie na localhost: 8080/login, wpisuję dane użytkownika, a dostawca uwierzytelniania przekierowuje mnie na adres 127.0.0.1:9999/login i otrzymuję komunikat o błędzie:
Uwierzytelnienie nie powiodło się: nie można uzyskać dane użytkowników z tokena
to co zostanie zalogowany:
INFO 2800 --- [nio-9999 -exec-3] osbasorUserInfoTokenServices: Uzyskiwanie informacji o użytkowniku od: http: // localhost: 8080/me
DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: Utworzono żądanie GET dla http: // localhost: 8080/me
DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: Ustawienie żądania Zaakceptuj nagłówek [aplikacja/json, application/* + json ]
DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: GET żądania do http: // localhost: 8080/me spowodowało 200 (OK)
INFO 28 00 --- [nio-9999-exec-3] osbasorUserInfoTokenServices: Nie można pobrać danych użytkownika: class org.springframework.web.client.RestClientException, Nie można wyodrębnić odpowiedzi: nie znaleziono odpowiedniego obiektu HttpMessageConverter dla typu odpowiedzi [interface java.util .map] oraz typ zawartości [text/html; charset = UTF-8]]
to moja aplikacja klient:
@EnableAutoConfiguration
@Configuration
@EnableOAuth2Sso
@RestController
public class ClientApplication {
@RequestMapping("/")
public String home(Principal user) {
return "Hello " + user.getName();
}
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
jest to aplikacja kliencka yml:
server:
port: 9999
security:
oauth2:
client:
client-id: acme
client-secret: acmesecret
access-token-uri: http://localhost:8080/oauth/token
user-authorization-uri: http://localhost:8080/oauth/authorize
resource:
user-info-uri: http://localhost:8080/me
To jest mój Aplikacja Provider odpowiedzialny:
@SpringBootApplication
public class SecurityApp {
public static void main(String[] args) {
SpringApplication.run(SecurityApp.class, args);
}
}
@Configuration
@EnableWebSecurity
@EnableAuthorizationServer
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
@RestController
public class Controller {
@RequestMapping({ "/user", "/me" })
public Map<String, String> user(Principal principal) {
Map<String, String> map = new LinkedHashMap<>();
map.put("name", principal.getName());
return map;
}
}
Jest dostawcy aplikacji yml:
security:
oauth2:
client:
client-id: acme
client-secret: acmesecret
scope: read,write
auto-approve-scopes: '.*'
Gdzie umieściłeś mapowanie dla/u uri w serwerze uwierzytelniania? –
Wygląda jak przewodnik po tym na stronie https://spring.io/guides/tutorials/spring-boot-oauth2/ po prostu mówi, aby wypróbować go przed wykonaniem tego niezbędnego kroku (który jest następny) i innego. Miałem ten sam problem. –