Эта статья является второй частью серии из трех статей, в которых рассматриваются способы включения единого входа с поставщиком OAuth2 для приложений на основе Spring Boot 2. 3 сообщения:
2. Устаревший подход Spring Boot / Spring 5 к интеграции с сервером авторизации OAuth2 / провайдером OpenID — этот пост
3. Более новый подход Spring Boot 2 / Spring 5 к интеграции с сервером авторизации OAuth2 / провайдером OpenID Connect — скоро
В этом посте будет рассмотрен устаревший подход Spring Boot 2 / Spring Security 5 к включению механизма аутентификации на основе OAuth2 для приложения, в этом посте предполагается, что все
шаги в предыдущем сообщении в блоге были выполнены, и UAA запущен и работает.
Вероятно, возникает вопрос: почему я говорю о наследии в контексте Spring Boot 2 / Spring Security 5, когда это должен был быть новый способ создания единого входа! Причина в том, что, поскольку разработчики использовали подход с Spring Boot 1.5.x, который сейчас считается устаревшим, в нем есть функции, которые не полностью перенесены на новый подход (возможность раскрутить сервер авторизации OAuth2). и возможность создания сервера ресурсов OAuth2 являются примерами), тем временем разработчики Spring Security (спасибо
Rob Winch & Joe Grandja ) обеспечил мост к устаревшему подходу в форме проекта spring-security-oauth2-boot .
Подход
Итак, как выглядит унаследованный подход — я уже подробно описывал его здесь , чтобы подвести итог, он работает на основе аннотации @ EnableOAuth2SSO и набора свойств, поддерживающих эту аннотацию, пример конфигурации безопасности выглядит следующим образом —
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableOAuth2Sso @Configuration public class OAuth2SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { super .configure(web); web.ignoring() .mvcMatchers( "/favicon.ico" , "/webjars/**" , "/css/**" ); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers( "/secured/**" ) .authenticated() .antMatchers( "/" ) .permitAll() .anyRequest() .authenticated(); } } |
и набор поддерживающих свойств, указывающих на UAA, следующий:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
ssoServiceUrl: http: //localhost:8080/uaa security: oauth2: client: client-id: client1 client-secret: client1 access-token-uri: ${ssoServiceUrl}/oauth/token user-authorization-uri: ${ssoServiceUrl}/oauth/authorize resource: jwt: key-uri: ${ssoServiceUrl}/token_key user-info-uri: ${ssoServiceUrl}/userinfo |
С проектом spring-security-oauth2-boot в качестве зависимости:
1
2
|
compile 'org.springframework.cloud:spring-cloud-starter-oauth2' compile( "org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.BUILD-SNAPSHOT" ) |
эти аннотации работают только для приложения Spring Boo2. Однако обратите внимание, что Spring Boot 2 поддерживает две различные веб-структуры — Spring Web и Spring Webflux. Этот подход транзитивно использует Spring Web, что делает Spring Web средой по умолчанию .
Полный пример с способами его запуска доступен в моем репозитории github здесь — https://github.com/bijukunjummen/oauth2-boot2
тестирование
Любой URI, начинающийся с «/ secured / **», активируется с помощью единого входа, если доступ к странице индекса осуществляется без проверки подлинности:
Теперь нажатие на URI, начинающееся с «/ secured / **», должно запустить поток кода авторизации OAuth2:
и должен предоставить пользователю экран входа в систему через UAA:
Войдите в систему с учетными данными, которые были созданы ранее — user1 / user1 должен перенаправить пользователя обратно в унаследованную версию Spring Boot 2 и отобразить защищенную страницу:
Это завершает унаследованный подход к SSO с Spring Boot 2. Обратите внимание, что это просто псевдо-аутентификация, OAuth2 предназначен больше для авторизации доступа к ресурсу пользователя, чем для аутентификации, как он используется здесь. Статья, которая разъясняет это, доступна здесь . В следующем посте с родным Spring Security 5 / Spring Boot2 будет представлен более понятный механизм аутентификации с использованием OpenID Connect.
См. Оригинальную статью здесь: Spring Boot 2 Applications и OAuth 2 — устаревший подход
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |