/oauth2-shiro

Integrate OAuth2(oltu) and Shiro

Primary LanguageJavaApache License 2.0Apache-2.0

oauth2-shiro


整合Apache OltuShiro. 提供一个轻量的OAUTH2应用框架实现.

并根据不同的应用场景提供不同的实现(如web场景,移动设备).

该项目与spring-oauth-server实现相同的需求与场合. 只是在实现上使用的技术不同(spring-oauth-server使用Spring Security + spring-security-oauth2实现); 相比spring-oauth-server, oauth2-oltu具有如下特点:

  • 更加透明 -- 每一步实现都有可以查看的, 更容易理解的源代码, 一目了然

  • 更多的可自定义与可扩展 -- 不管是ERROR返回信息的内容或格式, 都可根据需要自定义, 对请求参数,处理细节等可添加更多的具体实现

  • 可读性更强 -- 由于Shiro, Oltu 没有Spring Security,spring-security-oauth2 的门槛高, 所有代码都是常用的Controller或Java Bean实现各项业务, 更可读,更易于理解

  • 模块化 -- 得益于Oltu的模块化设计, 将authz, resources分开成不同的模块, 使用时可根据实际需要将二者合并在一个项目中或拆分为不同的模块


OAuth2下一代身份认证授权协议OIDC实现: MyOIDC

主要技术及版本

Spring Boot-- 2.4.13
oltu -- 1.0.2
shiro -- 1.11.0
MySQL -- 5.6+

开发环境

  • JDK -- 1.8.0_40

  • Maven -- 3.6.0

  • MySQL -- 5.7.22


项目模块说明

oauth2-shiro项目使用模块化开发, 以实现"高内聚, 低耦合"目标, 更符合实际项目需要; 分为三个模块: authz, core 与 resources, 具体说明如下

  • authz 实现使用各类grant_type去获取token业务逻辑----获取access_token

  • core 将公共部分提取到该模块中, 减少重复代码, 保证一致性, 如定义ClientDetails, AccessToken; authz, resources 模块都依赖于该模块

  • resources 资源管理模块,将受OAuth2保护的资源(URI)放在这里----使用access_token

在线测试

Redis版本

Redis版本的实现主要是将Token数据存储换成Redis,并利用TTL特性自动清除过期数据,性能更高。

如何使用

  1. 项目是Maven管理的, 需要本地安装maven(开发用的maven版本号为3.6.0), 数据库MySql(开发用的mysql版本号为5.7.22)
  2. 下载(或clone)项目到本地
  3. 项目由三个模块(core,authz,resources)组成, core是一个Java项目(jar), authz与resources是SpringBoot项目(.jar)
  4. 创建MySQL数据库(数据库名 oauth2_shiro), 并运行相应的SQL脚本(脚本文件位于others/database目录),
    运行脚本的顺序: oauth2-shiro.ddl -> initial-db.ddl
    若需要运行单元测试,则还需要创建数据库 oauth2_shiro_test 并运行SQL脚本 (单元测试的配置文件为application-test.properties,位于 src/test/resources 目录中)。
  5. 依次修改authz模块的配置文件application.properties(位于模块的src/main/resources目录)与resources模块的配置文件application.properties(位于模块的src/main/resources目录); 修改配置文件中的数据库连接信息(包括username, password等), 都连接到数据库oauth2_shiro
  6. 将本地项目导入到IDE(如Intellij IDEA)中, 并启动服务。
    (authz默认端口为8080,启动类 AuthzApplication.java; resources默认端口为8083,启动类 ResourcesApplication.java )。
    启动后查看控制台的日志输出或查看logs/目录中按日期分类的log日志。
    另: 也可通过maven package命令将项目编译为SpringBoot jar文件(authz.jar 与 rs.jar), 注意编译时每个模块的pom.xml文件中配置的数据库连接信息, 可在Maven命令中添加 -Dmaven.test.skip=true 忽略单元测试; 将authz模块与resources模块生成的jar通过 java -jar 命令启动( java -jar authz.jarjava -jar rs.jar)。
  7. 在浏览器中直接访问authz地址: http://localhost:8080 在线测试或 参考oauth_test.txt(位于others目录)的内容使用postman等工具测试。

支持的 grant_type

说明 oauth2-shiro 项目支持的OAuth2 grant_type (授权方式)与功能

  1. authorization_code -- 授权码模式(即先登录获取code,再获取token)
  2. password -- 密码模式(将用户名,密码传过去,直接获取token) [不推荐]
  3. refresh_token -- 刷新access_token
  4. implicit(token) -- 简化模式(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash) [不推荐]
  5. client_credentials -- 客户端模式(无用户,用户向客户端注册,然后客户端以自己的名义向'服务端'获取资源)
在OAuth2.1中对 grant_type的使用进行了安全升级(如不推荐使用 password 方式), 详细变化请查看 OAuth2.1的状态与主要特征

开发计划

从 0.2版本开始将项目的所有计划的开发内容列出来, 方便大家跟进, 也欢迎你加入.
项目的开发管理使用开源项目 andaily-developer.

计划加入Spring-Boot的实现

  • Version: 2.0.1 [plan]
    Date: --- / ---

    1. ---


  • Version: 2.0.0 [finished]
    Date: 2020-07-05 / 2023-09-28

    1. 升级使用Spring Boot,调整工程结构,使用 thymeleaf替换 servlet/jsp,打包由war换成jar

    2. 升级使用JDK 1.8, 日志框架使用logback替换log4j(处理log4j的安全漏洞)

    3. token支持使用JWT格式,通过配置参数authz.token.generator.type来控制与向下兼容

    4. 升级shiro到v1.11.0

    5. 密码存储算法由MD5换成SHA-256,并支持盐(salt),使密码存储更安全可靠;通过配置参数authz.store.credentials.alg来控制与向下兼容

    6. 对初始的账户密码使用更安全的密码策略:包括大小写字母,数字与特殊符号,长度至少10位


  • Version: 0.3 [finished]
    Date: 2016-07-16 / 2018-10-17

    1. (152) - oltu版本升级到1.0.2 并完成测试.

    2. (153) - 尝试添加并实现OIDC在 oauth2-shiro中[canceled]

    3. (161) - 增加必要的代码注释与配置注释, 更易理解

    4. implicit模式不需要带上client_secret


  • Version: 0.2 [finished]
    Date: 2016-05-26 / 2016-07-03

    1. (66) - 更新首页UI, 参照spring-oauth-server

    2. (67) - client details overview

    3. (68) - client details testing

    4. (69) - user add/edit, overview

    5. (70) - 添加API使用说明, 举例各个场景

    6. (71) - 发布到测试服务器

    7. (72) - resources模块更新UI说明



项目动态

  1. 2015-05-17 Initial project, start push code (private)

  2. 2015-07-16 oauth2-shiro项目开发状态(7月)

  3. 2015-09-06 oauth2-shiro项目开发状态(8月)

  4. 2015-09-06 项目由 私有 变为 开源, 开发 resource 模块

  5. 2015-09-26 版本0.1 开发完毕, 发布 0.1-beta 版本

  6. 2015-10-07 重构项目结构, 发布 0.1-rc 版本

  7. 2016-05-26 开始开发 0.2 版本

  8. 2016-07-02 添加在线测试环境

  9. 2016-08-17 发布 0.2 版本

  10. 2017-01-21 加入到GitHub中, Git@OSC地址: http://git.oschina.net/mkk/oauth2-shiro

  11. 2020-07-05 开始2.0.0版本开发

  12. 2023-09-28 发布 2.0.0 版本,大升级


姊妹项目


问答与讨论

与OAuth2相关的技术文章请访问 https://andaily.com/blog/?cat=19 (不断更新与OAuth相关的文章)
与项目相关的,与OAuth相关的问题与回答,以及各类讨论请访问
https://andaily.com/blog/?dwqa-question_category=oauth

捐赠历史

支付宝: monkeyking1987@126.com (**钊)

  • 明瑞 -- 5元
  • Triton -- 8.8元
  • 半个鼠标 -- 10元
  • Andis -- 10元 (2017-03-09)
  • Max Shu -- 10元 (2017-04-13)
  • 514407363 -- 6.66元 (2017-06-02)
  • 自负 -- 5元 (2017-09-18)
  • 红领巾 -- 10元 (2017-09-28)
  • 张宏俊 -- 20元 (2018-03-28)

开源扩展

关注更多我的开源项目请访问 https://andaily.com/my_projects.html

若需更多的商业技术支持请联系 monkeyk1987@gmail.com或发私信。