我正在使用Spring Cloud API Gateway,该应用程序具有基于yaml的配置,它工作得很好,因为所有路由都是内部链接,这意味着不需要任何代理。
但是,对用于验证JWT令牌的Spring Security存在依赖性,并且颁发者的URL是只能通过代理访问的资源。
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: https://some-site.com/itmp/v1/.well-known/jwks.json
issuer-uri: https://some-site.com/itmp/v1/
问题是:我不能使用http.proxyHost
参数强制WebClient
。我尝试了许多我发现all around the Internet的技术,比如在应用程序属性文件中隐式设置它们,或者在应用程序本身中硬编码。但对我来说没有任何效果。也许我错过了什么,也许Spring Cloud对这种行为有一些特殊的调整?
仅供参考项目基于Sping Boot 2.6.6(通常支持proxyWithSystemProperties
的React器网络1.0.17)
1条答案
按热度按时间jljoyd4f1#
最近我自己也遇到了这个问题。在反复了很多次之后,我最终创建了自己的
ReactiveJwtDecoder
bean,并设置了它内部使用的HttpClient
/WebClient
(使用NimbusReactiveJwtDecoder.webClient(WebClient)
)。大致如下:您可能可以注入
OAuth2ResourceServerProperties
-bean而不是那两个@Value
-注解的String
来获取URL。此外,请注意,如果应用程序已经执行了更多自定义的JWT声明验证,而不仅仅是检查
iss
、exp
和nbf
,则必须记住注入现有的JwtValidator
,并使用它来代替JwtValidators.createDefaultWithIssuer(String)
。