Эта статья является заключительной частью серии из 3 статей, в которой рассматриваются способы включения единого входа с поставщиком OAuth2 для приложений на основе Spring Boot 2. 3 сообщения:
- Способы начальной загрузки OpenID Connect-совместимого сервера авторизации OAuth2 / провайдера OpenID
- Устаревший подход Spring Boot / Spring 5 к интеграции с сервером авторизации OAuth2 / провайдером OpenID
- Более новый подход Spring Boot 2 / Spring 5 к интеграции с сервером авторизации OAuth2 / провайдером OpenID Connect — этот пост
В этом посте будет рассмотрен новый блестящий способ включения единого входа для приложения Spring Boot 2 с использованием встроенной поддержки OAuth2 в Spring Security.
Пост снова предполагает, что все, что описано в первом посте , завершено.
Spring Boot 2 Автоконфигурация
Spring Boot 2 предоставляет автоконфигурацию для встроенной поддержки OAuth2 в Spring Security (см. Класс org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration ).
Автоконфигурация активируется наличием библиотеки «spring-security-oauth2-client», доступной через следующие координаты gradle:
1
|
compile "org.springframework.security:spring-security-oauth2-client" |
Эта автоконфигурация работает с набором свойств, для провайдера идентификации UAA, который был запущен, набор свойств является следующим:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
uaa-base-url: http: //localhost:8080/uaa spring: security: oauth2: client: registration: uaa: client-id: client1 client-secret: client1 authorizationGrantType: authorization_code redirect_uri_template: "{baseUrl}/login/oauth2/code/{registrationId}" scope: resource.read,resource.write,openid,profile clientName: oauth2-sample-client provider: uaa: token-uri: ${uaa-base-url}/oauth/token authorization-uri: ${uaa-base-url}/oauth/authorize user-info-uri: ${uaa-base-url}/userinfo jwk-set-uri: ${uaa-base-url}/token_keys userNameAttribute: user_name |
Если бы я зависел от поддержки автоконфигурации Spring Boot 2 для собственной поддержки OAuth2, и я должен был запустить приложение, мне бы представили эту страницу при доступе к приложению:
Обратите внимание, что эта страница входа является страницей по умолчанию, созданной Spring Security OAuth2 и по умолчанию представляет список регистраций.
Нажав на «oauth2-sample-client», вы увидите страницу входа в систему провайдера идентификации, UAA, в следующем примере:
Для потока на основе OpenID Connect приложениям выдается токен ID вместе с токеном доступа, который я декодирую и представляю на странице:
Адаптации
Одна из быстрых настроек, которые я хочу сделать, — это перенаправление в UAA при доступе к любой защищенной странице, указанной с помощью шаблона «/ secure» uri. Ниже приведен набор конфигурации, который должен включить это:
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
32
33
34
|
package sample.oauth2.config 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 @Configuration class OAuth2SecurityConfig : WebSecurityConfigurerAdapter() { override fun configure(web: WebSecurity) { super .configure(web) web.ignoring() .mvcMatchers( "/favicon.ico" , "/webjars/**" , "/css/**" ) } override fun configure(http: HttpSecurity) { http.csrf().disable() http.authorizeRequests() .antMatchers( "/secured/**" ) .authenticated() .antMatchers( "/" , "/custom_login" ) .permitAll() .anyRequest() .authenticated() .and() .oauth2Login() .loginPage( "/custom_login" ) } } |
См. «/ Custom_login», устанавливаемый как URI выше, который, в свою очередь, просто передает управление контролируемым OAuth2 конечным точкам, которые знают, как установить соответствующие параметры и перенаправить на UAA:
1
2
3
4
5
6
7
8
|
@Controller class LoginController { @RequestMapping ( "/custom_login" ) fun loginPage(): String { return "redirect:/oauth2/authorization/uaa" } } |
На этом мы завершаем исследование встроенной поддержки OAuth2 в приложениях Spring Boo2.
Все образцы доступны в моем репозитории github — https://github.com/bijukunjummen/oauth2-boot2
Следующие ссылки были полезны для понимания поддержки OAuth2:
1. Документация Spring Security — https://docs.spring.io/spring-security/site/docs/current/reference/html/
2. Презентация Джо Гранджи на Spring One Platform 2017 — https://www.youtube.com/watch?v=WhrOCurxFWU
См. Оригинальную статью здесь: Spring Boot 2 нативный подход к SSO с OAuth 2 / OpenID Connect
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |