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

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

新增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

效果如下

授权码模式

Spring Boot 2.0 整合 Spring Security Oauth2

密码模式

Spring Boot 2.0 整合 Spring Security Oauth2

自定义登录

Spring Boot 2.0 整合 Spring Security Oauth2

刷新token

Spring Boot 2.0 整合 Spring Security Oauth2

代码下载

参考

  • https://github.com/lexburner/oauth2-demo
  • https://stackoverflow.com/questions/49122867/spring-boot-2-0-0-oauth2
  • https://www.jianshu.com/p/be2c09cd27d8?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends

原文 

https://longfeizheng.github.io/2018/04/29/Spring-Boot-2.0-整合-Spring-Security-Oauth2/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring Boot 2.0 整合 Spring Security Oauth2

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址