Spring Boot 2.0 整合 Spring Security Oauth2

微信扫一扫,分享到朋友圈

Spring Boot 2.0 整合 Spring Security Oauth2

是金子在哪都会发光的——每个说这句话的人都误以为自己是金子。

前言

Spring Security源码分析十一:Spring Security OAuth2整合JWT 中,我们使用 Spring Boot 1.5.6.RELEASE 版本整合 Spring Security Oauth2 实现了授权码模式、密码模式以及用户自定义登录返回 token 。但更新至 Spring Boot 2.0.1.RELEASE 版本时会出现一些小问题。在此,帮大家踩一下坑。关于 OAuth2 请参考 理解OAuth 2.0

修改pom.xml

更新 Spring Boot 版本为 Spring Boot 2.0.1.RELEASE

        org.springframework.boot
        spring-boot-starter-parent
        2.0.1.RELEASE
         
    

新增SecurityConfig配置

新增 SecurityConfig 用于暴露 AuthenticationManager

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        AuthenticationManager manager = super.authenticationManagerBean();
        return manager;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
//                .formLogin().and()
                .httpBasic().and()
                .csrf().disable();
    }
}

修改MerryyouAuthorizationServerConfig

修改 MerryyouAuthorizationServerConfig 用于加密 clientsecret 和设置重定向地址

......
 @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        InMemoryClientDetailsServiceBuilder build = clients.inMemory();
        if (ArrayUtils.isNotEmpty(oAuth2Properties.getClients())) {
            for (OAuth2ClientProperties config : oAuth2Properties.getClients()) {
                build.withClient(config.getClientId())
                        .secret(passwordEncoder.encode(config.getClientSecret()))
                        .accessTokenValiditySeconds(config.getAccessTokenValiditySeconds())
                        .refreshTokenValiditySeconds(60 * 60 * 24 * 15)
                        .authorizedGrantTypes("refresh_token", "password", "authorization_code")//OAuth2支持的验证模式
                        .redirectUris("http://www.merryyou.cn")
                        .scopes("all");
            }
        }
......

修改application.yml

由于在2.x版本中由于引入了不同的客户端,需要指定配置哪种连接池。

server:
  port: 8888
  redis:
    host: localhost
    port: 6379
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        min-idle: 0
        max-idle: 8
logging:
  level:
    org.springframework: info
merryyou:
  security:
    oauth2:
      storeType: redis #或者jwt
      jwtSigningKey: merryyou
      clients[0]:
        clientId: merryyou
        clientSecret: merryyou
      clients[1]:
              clientId: merryyou1
              clientSecret: merryyou1

效果如下

授权码模式

密码模式

自定义登录

刷新token

代码下载

参考

无人驾驶时代,汽车未来座舱什么样

上一篇

年轻一代既是时尚的消费者也是时尚的输出者!【2018华丽志全球时尚创新与投资论坛】

下一篇

你也可能喜欢

Spring Boot 2.0 整合 Spring Security Oauth2

长按储存图像,分享给朋友