我发现 JWT 解析和 JwtValidators 有一个奇怪的行为。
设想:
- Spring Boot OIDC 客户端(目前是一个小型 Web 应用,仅显示登录用户和 Spring 提供的一些 OIDC 对象)
- 自定义
JwtDecoderFacotry<ClientRegistration>
ID-Token 验证 JwtValidatorFactory
基于JwtValidators.createDefaultWithIssuer(String)
这适用于 Spring Boot 版本 <= 2.2.10。
调试:
NimbusJwtDecoder
(JAR spring-security-oauth2-jose) 使用声明集转换器。'iss'(颁发者)声明作为 URL 处理。JwtIssuerValidator
(由 内部创建JwtValidators.createDefaultWithIssuer(String)
)包装一个JwtClaimValidator<String>
.- 这个最后
equals()
总是调用它false
-它将字符串与 URL 进行比较。
我目前的解决方法不是调用JwtValidators.createDefaultWithIssuer()
,而是使用验证器new JwtTimestampValidator()
和自己的实现OAuth2TokenValidator<Jwt>
(使用 wrapping JwtClaimValidator<URL>
)。
还有其他人遇到这个问题吗?
- 基督教