Доставчик на удостоверяване за пролетна сигурност

1. Общ преглед

Този урок ще покаже как да настроите доставчик на удостоверяване в Spring Security, за да се даде възможност за допълнителна гъвкавост в сравнение със стандартния сценарий с помощта на проста UserDetailsService .

2. Доставчикът на удостоверяване

Spring Security предоставя разнообразни опции за извършване на удостоверяване. Те следват прост договор - заявка за удостоверяване се обработва от AuthenticationProvider и се връща напълно удостоверен обект с пълни идентификационни данни.

Стандартното и най-често срещано изпълнение е DaoAuthenticationProvider - който извлича потребителските подробности от прост, само за четене потребителски DAO - UserDetailsService . Тази услуга за потребителски данни има достъп само до потребителското име, за да извлече пълния потребителски обект. Това е достатъчно за повечето сценарии.

Повече персонализирани сценарии все още ще трябва да имат достъп до пълната заявка за удостоверяване, за да могат да изпълняват процеса на удостоверяване. Например при удостоверяване срещу някаква външна услуга на трета страна (като Crowd) - ще са необходими както потребителското име, така и паролата от заявката за удостоверяване .

За тези, по-напреднали сценарии, ще трябва да дефинираме персонализиран доставчик на удостоверяване :

@Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String name = authentication.getName(); String password = authentication.getCredentials().toString(); if (shouldAuthenticateAgainstThirdPartySystem()) { // use the credentials // and authenticate against the third-party system return new UsernamePasswordAuthenticationToken( name, password, new ArrayList()); } else { return null; } } @Override public boolean supports(Class authentication) { return authentication.equals(UsernamePasswordAuthenticationToken.class); } }

Забележете, че предоставените правомощия, зададени на върнатия обект за удостоверяване, са празни. Това е така, защото властите, разбира се, са специфични за приложението.

3. Регистрирайте доставчика на автори

След като дефинирахме доставчика на удостоверяване, трябва да го посочим в конфигурацията за защита на XML, като използваме наличната поддръжка на пространство от имена:

4. Конфигурация на Java

След това нека да разгледаме съответната Java конфигурация:

@Configuration @EnableWebSecurity @ComponentScan("com.baeldung.security") public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomAuthenticationProvider authProvider; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(authProvider); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated() .and().httpBasic(); } }

5. Извършване на удостоверяване

Искането за удостоверяване от клиента е основно същото с или без този персонализиран доставчик на удостоверяване на задния край.

Нека използваме проста команда за навиване, за да изпратим удостоверена заявка:

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

За целите на този пример ние осигурихме REST API с основно удостоверяване.

И ние получаваме обратно очакваните 200 OK от сървъра:

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

6. Заключение

В тази статия обсъдихме пример за персонализиран доставчик на удостоверяване за Spring Security.

Пълното изпълнение на този урок може да бъде намерено в проекта GitHub.