Spring Security Authentication Provider

1. Oversigt

Denne vejledning viser, hvordan du opretter en Godkendelsesudbyder i forårssikkerhed for at give mulighed for yderligere fleksibilitet sammenlignet med standardscenariet ved hjælp af et simpelt UserDetailsService.

2. Godkendelsesudbyderen

Spring Security giver en række muligheder for udførelse af godkendelse. Disse følger en simpel kontrakt - en Godkendelse anmodning behandles af en AuthenticationProvider og et fuldt godkendt objekt med fuld legitimationsoplysninger returneres.

Standard og mest almindelige implementering er DaoAuthenticationProvider - som henter brugeroplysningerne fra en simpel, skrivebeskyttet bruger DAO - UserDetailsService. Denne brugerdetaljer service har kun adgang til brugernavnet for at hente den fulde brugerenhed. Dette er nok til de fleste scenarier.

Flere brugerdefinerede scenarier skal stadig have adgang til det fulde Godkendelse anmode om at kunne udføre godkendelsesprocessen. For eksempel, når du godkender mod en ekstern tredjeparts service (såsom Crowd) - både den brugernavn og adgangskode fra godkendelsesanmodningen vil være nødvendigt.

For disse mere avancerede scenarier skal vi definere en brugerdefineret godkendelsesudbyder:

@Komponent offentlig klasse CustomAuthenticationProvider implementerer AuthenticationProvider {@Override public Authentication authenticate (Authentication authentication) kaster AuthenticationException {String name = authentication.getName (); Strengadgangskode = authentication.getCredentials (). ToString (); hvis (shouldAuthenticateAgainstThirdPartySystem ()) {// bruger legitimationsoplysninger // og godkendes mod tredjepartssystemet, returner nyt UsernamePasswordAuthenticationToken (navn, adgangskode, ny ArrayList ()); } ellers {return null; }} @ Override offentlige boolske understøttelser (klasseautentificering) {return authentication.equals (UsernamePasswordAuthenticationToken.class); }}

Bemærk, at de tildelte myndigheder sætter den returnerede Godkendelse objektet er tomt. Dette skyldes, at myndighederne naturligvis er applikationsspecifikke.

3. Registrer godkendelsesudbyderen

Nu hvor vi har defineret godkendelsesudbyderen, skal vi specificere den i XML-sikkerhedskonfiguration ved hjælp af den tilgængelige understøttelse af navneområdet:

4. Java-konfiguration

Lad os derefter se på den tilsvarende Java-konfiguration:

@Configuration @EnableWebSecurity @ComponentScan ("com.baeldung.security") offentlig klasse SecurityConfig udvider WebSecurityConfigurerAdapter {@Autowired private CustomAuthenticationProvider authProvider; @ Override beskyttet ugyldig konfiguration (AuthenticationManagerBuilder auth) kaster Undtagelse {auth.authenticationProvider (authProvider); } @ Override beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.authorizeRequests (). AnyRequest (). Godkendt (). Og (). HttpBasic (); }}

5. Udførelse af godkendelse

Anmodning om godkendelse fra klienten er dybest set det samme med eller uden denne brugerdefinerede godkendelsesudbyder på bagsiden.

Lad os bruge en simpel krølle kommando til at sende en godkendt anmodning:

curl --header "Accepter: application / json" -i --brugerbruger1: user1Pass // localhost: 8080 / spring-security-custom / api / foo / 1

Med henblik på dette eksempel har vi sikret REST API med grundlæggende godkendelse.

Og vi får tilbage de forventede 200 OK fra serveren:

HTTP / 1.1 200 OK Server: Apache-Coyote / 1.1 Set-cookie: JSESSIONID = B8F0EFA81B78DE968088EBB9AFD85A60; Sti = / fjeder-sikkerhed-brugerdefineret /; HttpOnly Content-Type: application / json; charset = UTF-8 Transfer-Encoding: chunked Date: Sun, 02 Jun 2013 17:50:40 GMT

6. Konklusion

I denne artikel diskuterede vi et eksempel på en brugerdefineret godkendelsesudbyder til Spring Security.

Den fulde implementering af denne vejledning kan findes i GitHub-projektet.