Spring Security Authentication Provider

1. Overzicht

Deze tutorial laat zien hoe je een Verificatieprovider in Spring Security om extra flexibiliteit mogelijk te maken in vergelijking met het standaardscenario met behulp van een eenvoudig UserDetailsService.

2. De authenticatieleverancier

Spring Security biedt een scala aan opties voor het uitvoeren van authenticatie. Deze volgen een eenvoudig contract - een Authenticatie verzoek wordt verwerkt door een AuthenticationProvider en een volledig geauthenticeerd object met volledige referenties wordt geretourneerd.

De standaard en meest voorkomende implementatie is de DaoAuthenticationProvider - die de gebruikersgegevens ophaalt van een eenvoudige, alleen-lezen gebruiker DAO - de UserDetailsService. Deze service voor gebruikersgegevens heeft alleen toegang tot de gebruikersnaam om de volledige gebruikersentiteit op te halen. Dit is voldoende voor de meeste scenario's.

Meer aangepaste scenario's hebben nog steeds toegang tot de volledige versie nodig Authenticatie verzoek om het authenticatieproces uit te kunnen voeren. Bijvoorbeeld bij authenticatie tegen een externe service van derden (zoals Crowd) - beide gebruikersnaam en de wachtwoord van het authenticatieverzoek zal nodig zijn.

Voor deze, meer geavanceerde scenario's, zullen we dat moeten doen definieer een aangepaste authenticatieleverancier:

@Component public class CustomAuthenticationProvider implementeert AuthenticationProvider {@Override public Authentication authenticate (Authentication authentication) genereert AuthenticationException {String name = authentication.getName (); String wachtwoord = authentication.getCredentials (). ToString (); if (shouldAuthenticateAgainstThirdPartySystem ()) {// gebruik de referenties // en authenticeer tegen het externe systeem retourneer nieuwe UsernamePasswordAuthenticationToken (naam, wachtwoord, nieuwe ArrayList ()); } else {retourneer null; }} @Override openbare booleaanse ondersteuning (Class authentication) {return authentication.equals (UsernamePasswordAuthenticationToken.class); }}

Merk op dat de toegekende autoriteiten de geretourneerde Authenticatie object zijn leeg. Dit komt omdat autoriteiten natuurlijk toepassingsspecifiek zijn.

3. Registreer de authenticatieleverancier

Nu we de authenticatieleverancier hebben gedefinieerd, moeten we deze specificeren in de XML-beveiligingsconfiguratie, met behulp van de beschikbare naamruimteondersteuning:

4. Java-configuratie

Laten we vervolgens eens kijken naar de bijbehorende Java-configuratie:

@Configuration @EnableWebSecurity @ComponentScan ("com.baeldung.security") public class SecurityConfig breidt WebSecurityConfigurerAdapter uit {@Autowired private CustomAuthenticationProvider authProvider; @Override beschermde ongeldige configuratie (AuthenticationManagerBuilder auth) genereert Uitzondering {auth.authenticationProvider (authProvider); } @Override beschermde leegte configureren (HttpSecurity http) gooit uitzondering {http.authorizeRequests (). AnyRequest (). Geauthenticeerd () .en (). HttpBasic (); }}

5. Verificatie uitvoeren

Authenticatie aanvragen bij de klant is in principe hetzelfde met of zonder deze aangepaste authenticatieleverancier aan de achterkant.

Laten we een simpele gebruiken krullen opdracht om een ​​geverifieerd verzoek te verzenden:

curl --header "Accept: application / json" -i --user user1: user1Pass // localhost: 8080 / spring-security-custom / api / foo / 1

Voor de doeleinden van dit voorbeeld hebben we de REST API beveiligd met basisverificatie.

En we krijgen de verwachte 200 OK terug van de server:

HTTP / 1.1 200 OK Server: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = B8F0EFA81B78DE968088EBB9AFD85A60; Pad = / spring-security-custom /; HttpOnly Content-Type: application / json; charset = UTF-8 Transfer-Encoding: chunked Datum: zo, 02 juni 2013 17:50:40 GMT

6. Conclusie

In dit artikel hebben we een voorbeeld besproken van een aangepaste authenticatieleverancier voor Spring Security.

De volledige implementatie van deze tutorial is te vinden in het GitHub-project.