Tips
1. 由于 spring cloud gateway 是基于 WebFlux 框架实现的,该网关作为资源服务器时不能使用 @EnableResourceServer 注解,需要使用 @EnableWebFluxSecurity 注解来配置安全过滤链。
2. 在 springboot 2.2 之前的版本中,安全框架对应的是 spring-security 5.14,该版本只实现了基于 id token (jwk) 的认证,而我当前项目中的认证服务组件是基于 org.springframework.cloud:spring-cloud-starter-oauth2 框架开发,使用的是秘钥签名的 access token,所以网关服务组件需要使用 springboot 2.2 + spring security 5.2 来处理 jws。
3. 现有项目使用了 gradle 构建,是一个多模块的结构,其中主模块引入了 2.1.2.RELEASE 版本的 org.springframework.boot 插件,用来确保各模块中 spring 组件的版本统一,此时子模块是无法通过修改插件版本号或重新引入插件来改变模块中 springboot 的版本,所以网关模块想用要引入 springboot 2.2 的话,就得脱离主模块,或者将插件引入的操作直接下放到各个子模块的构建过程中。
4. org.springframework.cloud:spring-cloud-starter-oauth2 中 org.springframework.security.jwt.crypto.sign.MacSigner 支持使用短密码的 HMACSHA256 签名算法,NimbusReactiveJwtDecoder 不支持短密码。