Java HeartBeat 3.0.0 发布,心跳检测应用服务器(支持协议HTTP/UDP/TCP)微服务应用程序

Java HeartBeat 3.0.0 版本已经发布,带来Socket监控支持(TCP/UDP)。

3.0.0 版本主要更新如下:

  1. 添加Socket (TCP,UDP)的监控
  2. 升级JDK, SpringBoot等基础版本, log升级使用logback框架, thymeleaf替换jsp
  3. 各实例提供分组与查询
  4. 邮件配置界面化,更灵活(不在配置文件中写固定)
  5. 提醒方式增加钉钉机器人(相比邮件即时性更好)
  6. 优化界面部分UI,更直观简洁

HeartBeat 3.0.0 版本访问地址:https://gitee.com/mkk/HeartBeat/tree/3.0.0/

SpringSecurity中OAuth2.1/OIDC1.0升级变化明细

spring-oauth-server v3.0.0版本中,我们全部升级了OAuth协议(从OAuth2.0升级到OAuth2.1)并同步增加了对OIDC1.0的支持落地。这些实现的底层依赖SpringSecurity框架的变化,此文将这些细节一一通过对比来讲解。

每一项是一个变化点,依次罗列出之前,之后(v3.0.0)以及说明。

  • spring security oauth组件

spring-security-oauth2 v2.3.x

spring-security-oauth2-authorization-server v1.1.x

Spring Security官方对旧的不再维护支持而推荐升级替换用新的实现,详见 https://andaily.com/blog/?p=20077

  • grant_type变化
  • authorization_code (包括PKCE)
  • password
  • client_credentials
  • implicit
  • refresh_token
  • authorization_code (包括PKCE)
  • client_credentials
  • refresh_token
  • device_code (urn:ietf:params:oauth:grant-type:device_code)
  • jwt-bearer (urn:ietf:params:oauth:grant-type:jwt-bearer)

grant_type的变化看到安全在不断升级,同时为更好的支持物联网提供协议上的支撑。具体说明详见 https://andaily.com/blog/?p=103

  • scope变化
  • read
  • write
  • trust
  • openid
  • profile
  • email
  • address
  • phone

scope的变化按照OIDC协议的规范来实现的,代码中详见 OidcScopes.java

  • MySQL表结构
  • oauth_client_details
  • oauth_client_token
  • oauth_access_token
  • oauth_refresh_token
  • oauth_code
  • oauth2_registered_client
  • oauth2_authorization
  • oauth2_authorization_consent

表设计变化挺大的,主要由于框架的实现重新设计与实现,新的表结构能更好地满足token全生命周期管控(同时带来一定的性能问题,可通过技术手段解决),有更好的配置项扩展能力(通过将各类配置项通过JSON格式数据存储)

  • token配置项
  • access_token_validity -设置token有效时长(默认12小时)
  • refresh_token_validity -设置refresh_token有效时长(默认30天)
  • authorization_code_time_to_live -设置authorization_code有效时长(默认5分钟)
  • access_token_time_to_live -设置access_token有效时长(默认5分钟)
  • access_token_format -设置access_token的格式,有两选项self-contained(自签即JWT格式,默认) reference(兼容旧的,通过UUID生成随机值)
  • device_code_time_to_live -设置device_code有效时长(默认5分钟)
  • reuse_refresh_token -设置是否复用refresh_token值当刷新token后(默认true复用,设置false时每次刷新后将生成新的refresh_token值)
  • refresh_token_time_to_live -设置refresh_token有效时长(默认60分钟)
  • idtoken_signature_algorithm -设置生成id_token使用的签名算法(默认RS256)

新版本与token配置项相关的请查看 TokenSettings.java 类与数据库表oauth2_registered_client 中的字段 token_settings

  • client配置项
  • trusted -是否授权信任; 适用于grant_type=”authorization_code”的情况,当用户登录成功后,若该值为0,则会跳转到让用户Approve的页面让用户同意授权
  • autoapprove -是否自动跳过用户授权步骤
  • client_secret_expires_at -client_secret过期时间,可设置
  • client_authentication_methods -认证请求时传递client_secret支持的方式(如post, basic)
  • post_logout_redirect_uris -退出时的重定向到client的uri地址
  • require_proof_key -是否强制使用PKCE(默认false)
  • require_authorization_consent -授权时是否要求用户进行确认(默认false)
  • token_endpoint_authentication_signing_algorithm -指定jwt-bearer流程中生成id_token时使用的签名算法(常见如RS256, ES256)
  • client_name -可以给client设置一个有业务意义的名称

新版本与client配置项相关的请查看 ClientSettings.java 类与数据库表 oauth2_registered_client 中的字段 client_settings

  • java版本

java 8

java 17+(openJDK)

从JVM层面做安全升级,同时提升性能与稳定性

  • token全生命周期管控API
  • /oauth/token -通过认证生成token
  • /oauth/check_token -检查token状态
  • /oauth/error -响应HTML异常信息
  • /oauth2/token -通过认证生成token
  • /userinfo -获取用户信息,OIDC协议中定义
  • /oauth2/revoke -吊销已签发的token
  • /oauth2/introspect -审查token状态(包括是否存活等)
  • /connect/logout -退出并销毁token,浏览器上调用

新版本的token全生命周期管控完整性更好,也是协议更新版本的优势所在

通过各明细对比,能更清晰理解与把控各项安全细节。

spring-oauth-server v3.0.0 大版本发布,升级到OAuth2.1 & OIDC1.0

在spring-oauth-serverg开源10周来之际,我们发布了全新的大版本v3.0.0,从底层架构到整体的协议支持都做了大范围的升级与更新,更好的满足业务需要与跟上技术演进。

此版本升级更新的主要内容如下:

  1. 底层安全架构升级:jdk升级17(相比jdk8性能与稳定性有大提升), spring6.x, springboot3.x, thymeleaf替换servlet/jsp
  2. 全面升级支持 OAuth2.1协议与 OIDC1.0协议(同时弃用了旧的grant_type, 如 password模式)
  3. 构建包由war换成jar, SQL相应调整
  4. 用spring-security-oauth2-authorization-server升级替换spring-security-oauth2, 详见背景说明
  5. 界面使用说明按OAuth2.1进行友好设计并更新各提示语句
  6. 增加spring-restdocs文档支持, 自动生成API相关文档

v3.0.0 版本链接:https://gitee.com/shengzhao/spring-oauth-server/tree/3.0.0/

MyOIDC v1.1.2 发布,基于OIDC协议的参考实现

MyOIDC  — 基于OIDC协议的参考实现,根据各类库提供实现参考 。正式版本v1.1.2发布,此版本主要是安全升级,更新内容:

1.为了处理CVE安全漏洞,对以下依赖库进行了升级:

  • spring-boot升级到v2.5.9;
  • spring-security-oauth2升级到v2.3.8.RELEASE
  • guava升级到v31.0-jre

2.增加了banner.txt,更新README.md让使用者更易上手

3.修复已知的各类bug

v1.1.2 tag:https://gitee.com/mkk/MyOIDC/tree/v1.1.2

spring-security-oauth2从v2.4.0.RELEASE开始不推荐使用并迁移

spring-oauth-server最新的版本中使用的spring-security-oauth2版本为v2.3.8.RELEASE;但之后的版本中将不再升级spring-security-oauth2的版本。

这是因为在spring-security-oauth2官方从v2.4.0.RELEASE版本开始将所有类标识为过期的(@Deprecated),并且说明了原因。

* @deprecated See the <a href=”https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide”>OAuth 2.0 Migration Guide</a> for Spring Security 5.

所有类在IDE中显示为不推荐使用。

在查看迁移的文章 https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide 中说明有具体原因。

为此,在spring-oauth-server的最新开发版本中(https://gitee.com/shengzhao/spring-oauth-server/tree/2.1.1/)也将去掉spring security oauth2依赖,改用新的Spring Security提供的 spring-security-authorization-server来替换。

尽请期待。

OAuth2中token升级使用JWT的实现参考

OAuth2中默认使用 Bearer Tokens (一般用UUID值)作为token的数据格式,但也支持升级使用JSON Web Token(JWT)来作为token的数据格式。

20200918101526

下面以 spring-oauth-server 升级使用JWT来说明

重点在于提供一个 JwtTokenStore的配置类,详细可参见 MyOIDC 工程中的配置:https://gitee.com/mkk/MyOIDC/blob/master/myoidc-server/src/main/java/myoidc/server/config/OAuth2ServerConfiguration.java

需要注意的是底层使用的算法,可以是RSA也可以对称加密的HMAC等,具体可查看 JwtAccessTokenConverter.java 类。

对应的工程中需要增加 spring-security-jwt 库的依赖(如果是Maven工程)。