使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

这篇文章是3个系列文章的最后一部分,该系列文章探讨了为基于Spring Boot 2的应用程序启用OSO2提供程序SSO的方法。 3个帖子是:

  1. 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法
  2. 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring Boot / Spring 5方法
  3. 与OAuth2授权服务器/ OpenID Connect提供商集成的更新的Spring Boot 2 / Spring 5方法–这篇文章

这篇文章将探讨使用Spring Security中的本机OAuth2支持为Spring Boot 2应用程序启用SSO的崭新方法。

该文章再次假定第一篇文章中描述的所有内容均已完成。

Spring Boot 2自动配置

Spring Boot 2为Spring Security中的本机OAuth2支持提供了自动配置(请参见org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration类)。

通过以下gradle坐标可用的“ spring-security-oauth2-client”库激活了自动配置:

compile "org.springframework.security:spring-security-oauth2-client"

此自动配置会处理一组属性,对于已启动的UAA身份提供程序,该组属性如下:

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的支持,并实现应用程序的启动,那么在访问应用程序时将看到以下页面:

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法_第1张图片

请注意,此登录页面是由Spring Security OAuth2创建的默认页面,默认情况下会显示注册列表。

单击“ oauth2-sample-client”,将显示身份提供者(在这种情况下,UAA)的登录页面:

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法_第2张图片

对于基于OpenID Connect的流程,应用程序将获得ID令牌以及我正在解码并呈现在页面上的Access令牌:

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法_第3张图片

客制化

我要进行的快速自定义之一是在访问通过“ / secured” uri模式指定的任何受保护页面时重定向到UAA,以下是一组应启用此配置的配置:

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:

@Controller
class LoginController {

    @RequestMapping("/custom_login")
    fun loginPage(): String {
        return "redirect:/oauth2/authorization/uaa"
    }
}

到此结束对Spring Boo2应用程序中对本机OAuth2支持的探索。

所有示例都可以在我的github存储库中找到 – https://github.com/bijukunjummen/oauth2-boot2

以下参考资料有助于理解OAuth2支持:

1. Spring安全性文档 – https://docs.spring.io/spring-security/site/docs/current/reference/html/

2. Joe Grandja的 Spring One Platform 2017演示文稿 – https://www.youtube.com/watch?v=WhrOCurxFWU

翻译自: https://www.javacodegeeks.com/2018/03/spring-boot-2-native-approach-sso-oauth-2-openid-connect.html

你可能感兴趣的:(使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法)