Czy ktoś mógłby mi pomóc z przykładem aplikacji Spring Boot, która zawiera usługę Rest z punktami końcowymi chronionymi przez Spring Security przy użyciu oAuth2 z poświadczeniami użytkownika z bazy danych MySQL?Usługa Spring Boot Rest z oAuth2 Poświadczenia bezpieczeństwa z bazy danych
Odpowiedz
Co na ten temat: https://github.com/spring-projects/spring-security-oauth/tree/master/tests/annotation/jdbc (to nie jest MySQL, ale to JDBC, więc transformacja jest banalna)?
Proszę odnieść się do https://github.com/royclarkson/spring-rest-service-oauth/ i wykonać następujące zmiany Wykorzystuje źródło danych podstawowy określony w application.properties,
@Configuration
public class OAuth2ServerConfiguration {
private static final String RESOURCE_ID = "rest_api";
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends
ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId(RESOURCE_ID);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/users").hasRole("ADMIN")
.antMatchers("/review").authenticated()
.antMatchers("/logreview").authenticated()
.antMatchers("/oauth/token").authenticated()
.and()
.csrf()
.csrfTokenRepository(csrfTokenRepository()).and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
;
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null
&& !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends
AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Autowired
DataSource dataSource;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
endpoints
.tokenStore(new JdbcTokenStore(dataSource))
.authenticationManager(this.authenticationManager);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.jdbc(dataSource);
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices tokenServices = new DefaultTokenServices();
tokenServices.setSupportRefreshToken(true);
tokenServices.setAccessTokenValiditySeconds(300);
tokenServices.setRefreshTokenValiditySeconds(6000);
tokenServices.setTokenStore(new JdbcTokenStore(dataSource));
return tokenServices;
}
}
}
Witam, jestem nowy w tym, ale z pewnych powodów nie pracuję dla żądań POST. {"error": "access_denied", "error_description": "Nie znaleziono oczekiwanego tokenu CSRF. Czy twoja sesja wygasła?"} Działa dobrze z metodami GET –
ma ten sam problem, czy znalazłeś rozwiązanie? –
- 1. Poświadczenia klienta Spring Boot + Oauth2
- 2. Spring Boot OAuth2 - Nie można uzyskać danych użytkownika z tokena
- 3. Inicjowanie bazy danych przed testem Spring Boot
- 4. Spring Boot OAuth2 łącząc użytkowników wewnętrznych z logowaniem Facebook/Google
- 5. Spring Boot i OAuth2, WebSecurityConfigurerAdapter kontra ResourceServerConfigurerAdapter
- 6. Spring Boot z MongoTemplate
- 7. poświadczenia bazy danych i leiningen?
- 8. pobierz plik ze Spring boot rest service
- 9. Usługa REST z użyciem uwierzytelniania Spring Security i Firebase
- 10. Running @HandleBeforeCreate Po zatwierdzeniu podmiotu w Spring Boot Danych REST
- 11. Wyłącz całą automatyczną konfigurację bazy danych w Spring Boot
- 12. Jak uruchomić aplikację Spring-Boot bez zależności od bazy danych?
- 13. Tworzenie usługi Spring REST z interfejsem OData
- 14. Aplikacja Spring Boot z bazą danych pliku H2
- 15. pomocnik do logowania spring-oauth2
- 16. Rest, Spring własny serwer OAuth2 + dostawcy OAuth2, tacy jak Facebook, Google, Yahoo
- 17. Problemy z OAuth2 po aktualizacji bazy Firebase
- 18. Rest API z bazy danych multi-tenant oddzielone przez klienta
- 19. Wiosna Boot SOAP usługa z MVC
- 20. Spring Boot ze źródłem danych JNDI
- 21. Korzystanie z dwóch źródeł danych w Spring Boot
- 22. Jak odsłonić niestandardowe repozytorium crud z repozytorium danych Spring REST?
- 23. Rest Controller nie rozpoznaje żądania GET w Spring Boot App
- 24. Spring Boot REST API - czas oczekiwania na żądanie?
- 25. Obsługa żądań gzipowanych w aplikacji Spring Boot REST
- 26. Spring Boot Rest - jak skonfigurować 404 - nie znaleziono zasobu
- 27. Jak używać Dozer z Spring Boot?
- 28. Spring Boot: Load @Value z pliku YAML
- 29. Konwertuj istniejącą aplikację Spring na Spring-Boot
- 30. Tworzenie serwera OAuth2 z nodejs
Thanks Dave. Wciąż jestem całkiem nowy z bezpieczeństwem wiosennym. Wiosenne uruchamianie ułatwia utworzenie usługi RESTful, ale nadal nie jestem pewien co do implementacji zabezpieczeń za pomocą oAuth2 i referencji bazy danych. Widziałem niektóre przed-wiosenne projekty rozruchowe, które tworzy tabele znaczników i odświeżania w bazie danych. Czy to już nie jest zwyczaj? https://github.com/royclarkson/spring-rest-service-oauth używa uwierzytelniania w pamięci. Czy jest to preferowane powyżej przechowywania żetonów w DB? –
To łącze zawiera pliki SQL dla wspomnianego schematu (są one wykonywane podczas uruchamiania dla bazy danych w pamięci, ale można je wykonać samodzielnie dla mysql). Próbka Roya jest podobna (i równie minimalna), ale magazyn użytkownika w pamięci oczywiście nie będzie przydatny w produkcji dla większości systemów. –