7 Star 56 Fork 32

东莞理工学院-黎志雄 / 基于Spring Security 5的OAuth2通用登录模块

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

关于本项目

  • spring boot 2.0 后,加强了oauth2的支持。研究源码后,主要是增加了 http.oauth2Login() 。
  • 本项目 已更新 到 2.3 ,适配 Spring Boot 2.3.2 。
  • 本项目是 Spring Security OAuth2 Login 的二次封装,目的在于定制 Spring Security OAuth2的配置,以适配中国国内oauth2提供商的规范(微信、QQ、钉钉、码云)以及我单位的中央认证的支持,使大家在使用 Spring Security 框架进行 OAuth2 认证授权时,使用原生的配置属性即可,省去大量踩坑与调试的时间。
  • 本项目后续会增加 国内其它支持OAuth2第三方登陆厂商 的自动配置功能,如:钉钉小程序、钉钉H5微应用等。
  • 本项目已发布到Maven中央仓库,https://search.maven.org/artifact/com.gitee.dgut-sai/security-oauth2

演示Demo

使用本项目的演示Demo,请参考这个仓库:https://gitee.com/dgut-sai/security-oauth2-sample

版本更新

  • 2.3 版本,增加 微信公众号平台 微信网页授权登录。针对的是用户在 微信客户端 中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。测试时,网页需要在 微信开发者工具中 打开。
  • 2.2.1版本,优化代码。
  • 2.2版本,增加 码云 OAuth2 登录 ; 重构代码。
  • 2.1版本,增加 钉钉扫码登录独立第三方应用。注意:此功能与企业自建应用/第三方企业应用无关,只能用扫码登录打开第三方网站,并且不是钉钉内的应用免登,此流程只能做到获取到用户身份(无手机号和企业相关信息)。

编译项目

mvn install

如何使用本项目

本项目已发布到 Maven中央仓库,可以直接添加依赖使用。

新建一个 spring boot 项目,在 pom.xml 中加入:

    <dependency>
        <groupId>com.gitee.dgut-sai</groupId>
        <artifactId>security-oauth2</artifactId>
        <version>2.2.1</version>
    </dependency>

还有一些Web项目必要的模块:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

修改 application.yml,配置各oauth2提供商的 appid 和 appsecret,其它的信息不用填。

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: *****
            client-secret: *****
          weixin:
            client-id: *****
            client-secret: ******
          dgut:
            client-id: *****
            client-secret: *****
          qq:
            client-id: *****
            client-secret: *****
          # 进入 钉钉开发者平台 的页面,点击左侧菜单的【移动接入应用-登录】,然后点击右上角的【创建扫码登录应用授权】,创建用于免登过程中验证身份的appId及appSecret,创建后即可看到appId和appSecret。          
          dingding:
            client-id: *****
            client-secret: *****
          # v2.2 增加码云 oauth2 登录
          gitee:
            client-id: ****
            client-secret: ****
          # 微信公众号平台 微信网页授权登录 , 可以在公众号管理后台申请测试号,以获取appid与secret。
          # 测试时,网页需要在 微信开发者工具中 打开。
          WXMP:
            client-id: ****
            client-secret: ****

# 下面的属性设置获取code后的回调地址的前缀,最终根据注册ID解释后的地址如:/uaa/login/qq、/uaa/login/weixin            
# 默认值是:/login/oauth2/code,最终值为:/login/oauth2/code/qq、/login/oauth2/code/weixin
# 把最终的url设置在OAuth2提供商的回调地址那, 如:http://localhost/uaa/login/weixin
sai:
  security:
    oauth2:
      authorizationResponseBasePath: /uaa/login

回调域名 会自动识别

  • 如果你的域名是 www.dgut.edu.cn , 则回调地址会自动识别为: http://www.dgut.edu.cn/uaa/login/** ,**代表是qq、weixin、dingding 或 dgut 等;
  • https 也会自动识别;
  • 把最终识别的 url 设置到 OAuth2第三方登陆提供商的后台设置。

最后,在 spring security 中添加配置:

@EnableSaiOAuth2Login
@Configuration
public class SaiOAuth2LoginConfiguration extends WebSecurityConfigurerAdapter {

    // 设置security的拦截规则 START
    @Override
    public void configure(WebSecurity web) {
        // 不能在这个方法里忽略登录login的路径
        // 否则security的filter都不匹配login路径造成不能登录
        // 在这里忽略掉静态资源的路径是比较好的选择
        // 这与在配置文件设置security.ignoring是一样的
        web.ignoring().antMatchers("/css/**", "/js/**", "/fonts/**", "/images/**", "/favicon.ico", "/webjars/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
                .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                .apply(new SaiOAuth2LoginSecurityConfigurer())
                    .and()
                .oauth2Login().loginPage("/login").permitAll()
//                                .defaultSuccessUrl("/",true)
                                .successHandler((request, response, authentication) -> {
                                    // 一般登录成功后,我们会根据业务要求作一些处理。我们可以定义successHandler完成这个需求。
                                    // 当我们定义了 successHandler 后,defaultSuccessUrl会失效。
                                    // 注意,authentication 变量的实际类型是 OAuth2AuthenticationToken 。
                                    // 同时,SecurityContextHolder.getContext().getAuthentication() 也引用了这个对象,这里只是作示例提醒一下。
                                    log.info("SecurityContextHolder.getContext().getAuthentication() = " + SecurityContextHolder.getContext().getAuthentication());
                                    log.info("authentication = " + authentication);
                                    response.sendRedirect("/");
                                })
        ;
        // @formatter:on
    }
}

上面的配置代码注意下面三个步骤:

  1. 需要在一个配置类上添加 @EnableSaiOAuth2Login 注解 , 以激活配置;
  2. 在安全过滤链配置器中,调用 http.apply(new SaiOAuth2LoginSecurityConfigurer()) ;
  3. 可以继续自定义配置 oauth2Login() ,如上面的例子中,自定义了登陆入口的path为 /login 。

欢迎大家交流学习

微信:13026844888 QQ:2231068

MIT License Copyright (c) 2018 LiZhixiong(lizhx@dgut.edu.cn) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于最新Spring Boot 2.3.2与Spring Security 5.3.3,二次封装了oauth2登录功能,并提供微信、QQ、东莞理工学院中央认证的快速配置。 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/dgut-sai/security-oauth2.git
git@gitee.com:dgut-sai/security-oauth2.git
dgut-sai
security-oauth2
基于Spring Security 5的OAuth2通用登录模块
master

搜索帮助