6

Bu sorunun çözümü için web'de arama yaptım, ancak herhangi bir çalışma çözümü bulamadım. Temel Spring Boot OAuth2 Yetkilendirme Sağlayıcısı ve İstemcisini kurmaya çalışıyorum.Spring Boot OAuth2 - Kullanıcı ayrıntıları alınamadı token

Resmi Spring Boot talimatlarını takip ettim ve Facebook ile Github ile tek bir oturum açtım. Daha sonra Secure Spring Boot Web uygulaması oluşturma talimatlarını takip ettim.

Kendi Yetkilendirme Sunucumumu oluşturmak istedim, bu nedenle here açıklandığı gibi Güvenli Web Uygulamasına @EnableAuthorizationServer ek açıklamasını ekledim. Ayrıca bir bağlantıda açıklandığı gibi bir OAuth2 istemcisinin ayrıntılarını ekledim. Daha fazla talimatı takip ettim ve bir OAuth2 İstemcisi oluşturdum.

Her iki uygulamaya da başlıyorum, Müşteri açmak için 127.0.0.1:9999 adresini ziyaret edin, istemci beni localhost'a yönlendiriyor: 8080/login, Kullanıcı bilgilerini giriyorum ve Kimlik Doğrulama Sağlayıcısı beni 127.0.0.1:9999/login adresine yönlendiriyor ve bir hata mesajı:

Kimlik Başarısız: Bu günlüğe Nelerin token

kullanıcı bilgilerini elde edilemedi:

INFO 2800 --- [nio-9999 -exec-3] osbasorUserInfoTokenServices: Kullanıcı bilgisini alma: http: // localhost: 8080/me

DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: GET isteği oluşturuldu http: // localhost: 8080/me için

DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: Ayar isteği Başlığı kabul [application/json, application/* + json ]

DEBUG 2800 --- [nio-9999-exec-3] ossoauth2.client.OAuth2RestTemplate: http GET isteği: // localhost: 8080/me 200 sonuçlandı (OK)

BİLGİ 28 00 --- [nio-9999-exec-3] osbasorUserInfoTokenServices: Kullanıcı ayrıntıları alınamadı: sınıf org.springframework.web.client.RestClientException, Yanıt alınamadı: yanıt türü için uygun HttpMessageConverter bulunamadı [interface java.util .map] ve içerik türü [metin/html; charset = UTF-8]]

Bu benim istemci uygulama: Bu istemci uygulaması YML

@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); 
    } 

} 

olup:

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 

Bu benim Yetkilendirme Sağlayıcı uygulaması:

security: 
    oauth2: 
    client: 
     client-id: acme 
     client-secret: acmesecret 
     scope: read,write 
     auto-approve-scopes: '.*' 

cevap

6

Sorunu çözüldü:

@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; 
    } 
} 

Bu Uygulama Sağlayıcısı YML olduğunu! Kullanıcı uç noktası (user-info-uri) için istekleri işleyen Kaynak Sunucusunu kaçırıyordum.

@Configuration 
@EnableResourceServer 
public class ResourceServer 
     extends ResourceServerConfigurerAdapter { 
    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http 
      .antMatcher("/me") 
      .authorizeRequests().anyRequest().authenticated(); 
    } 
} 
için eşleme koydunuz
+2

/me kimlik doğrulama sunucusu URI: Yetkilendirme Sağlayıcı uygulaması için ben bu sınıfı eklendi? –

+0

Bu kılavuz, https://spring.io/guides/tutorials/spring-boot-oauth2/ adresinde, bu gerekli adımı (bir sonraki adım) tamamlamadan önce denemenizi söyler. Bende aynı sorun vardı. –