Yaylı bağlantı hizmeti oluşturmayı deniyorum, kendi oauth2 kaynak sunucum tarafından izin verilir. Ben kaynak sunucu oluşturuldu:oauth2 ile dinlenme hizmeti: Belirteç için erişim belirteci bulunamadı
@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {
@Autowired
private TokenStore tokenStore;
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenStore(tokenStore).resourceId("mobileapp");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/shop /**").authenticated().and()
.authorizeRequests().antMatchers("/auth/**").anonymous();
}
}
ve yetkilendirme sunucusu:
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager auth;
@Autowired
private DataSource dataSource;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Bean
public JdbcTokenStore tokenStore() {
return new JdbcTokenStore(dataSource);
}
@Bean
protected AuthorizationCodeServices authorizationCodeServices() {
return new JdbcAuthorizationCodeServices(dataSource);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.passwordEncoder(passwordEncoder);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.authorizationCodeServices(authorizationCodeServices())
.authenticationManager(auth)
.tokenStore(tokenStore())
.approvalStoreDisabled();
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource)
.passwordEncoder(passwordEncoder);
.withClient("mobile")
.authorizedGrantTypes("password", "refresh_token")
.authorities("ROLE_CLIENT")
.scopes("read", "write", "trust")
.autoApprove(true)
.resourceIds("mobileapp")
.secret("123456");
}
ben bukle kullanarak, sunucusundan bir erişim simgesi almayı deneyin:
bukle -X POST'un -Vu mobil : 123456 http://localhost:8080/oauth/token -H "Accept: application/json" -d "password = test123 & [email protected] & grant_type = şifre & kapsamı = & client_secret okumak = "
Ben bir yanıt mesajı olarak bu hatayı alıyorum:
{ "123456 & client_id = mobil hata": "server_error", "ERROR_DESCRIPTION":" java .io.NotSerializableException: org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder "} tomcat günlükleri olarak
da
varossoptoken.store.JdbcTokenStore - için erişim simgesi bulma başarısız oldu belirteç
DÜZENLEME: şifre encoder Bean tanımı:
@Bean
public BCryptPasswordEncoder passwordEncoder() {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
return bCryptPasswordEncoder;
}
Bu fasulye içinde, sınıfta oluşturulan Hangi OAuth2Config ve ResourceServer bildirildi.
Kodu kontrol ettim ve hangi tablo yayının kullanıldığını ve tablonun boş olduğunu öğrendim. Sorum şu: otomatik olarak oluşturulmalı mı yoksa kodumla ilgili bir sorun mu var?
Yardım için şimdiden teşekkür ederiz.
Eğer 'BCryptPasswordEncoder' fasulye sizin' Bean' @ tanımıyla soru güncellemek olabilir mi? – sthzg
BCryptPasswordEncoder Bean tanımını ekledim. – Marcin
Teşekkürler, '@ Bean' bence (benim için PasswordEncoder 'arabirimini kullanabilirsiniz rağmen), iyi görünüyor. Yerel olarak test ettiğimde, şifreli PW gibi "withClient (...). Secret (passwordEncoder.encode (" 123456 "))' ile "withClient (..). Secret (...)" 'ı ayarlamak zorundayım ama Bu, serileştirme hatasını açıklamıyor (kodlamadığımda aldığım bir "BadCredentials" yanıtını açıklamak ister.'Security.passwordEncoder (...) 'ayarlanmadığında her şeyin işe yarayıp yaramadığını kontrol ettiniz mi? – sthzg