OAuth2 Spring Security 5.2.x from Spring Security Oauth 2.x access authenticated oauth/token_key getting 403

OAuth2 Spring Security 5.2.x from Spring Security Oauth 2.x access authenticated oauth/token_key getting 403

调用时

oauth/token_key

例如检索 OAuth public 密钥

{
     "alg":"SHA256withRSA",
     "value":"-----BEGIN PUBLIC KEY----- nMAABIjANBgkq… -----END PUBLIC KEY-----"
}

我们如何在通过 Spring OAUTH 调用时传递凭据。

以前这些属性似乎是用

设置的
security.oauth2.resource.jwt.key-uri=http://localhost:8080/oauth/token_key

security.oauth2.client.client-id=clientID
security.oauth2.client.client-secret=clientPassword

migration guide 中,我看不到为此或通过配置进行任何适当的迁移。

因为我们现在使用这样的配置,我相信设置 jwt.key-uri

spring.security.oauth2.client.resourceserver.jwt.jwk-set-uri=

但没有设置任何 id 或 secret 的等效位置。

谢谢

因此,像这样保护 public 密钥和遗留 OAuth 服务器可能是一种边缘情况。我此时找不到任何文档来描述有效的解决方案。看起来 Spring Security OAuth 正处于一个巨大的转变中。我不想回滚到已弃用的代码,所以我为 NimbusReactiveJWTDecoder 定义了自己的 bean。

这允许我在应用程序启动时获取 public 密钥时通过基本身份验证。

Koltin 中的示例代码是:

@Bean 
fun jwtDecoderByPublicKey(webclient: WebClient): NimbusReactiveJWTDecorder? {
  webclient
    .get()
    .headers { headers -> headers.setBasicAuth("username","password") }
    .retrieve()
    .bodyToMono<>()
    .map {
      KeyFactory.getInstance("RSA")
         .generatePublic(X509EncodedKeySpec(getKeySpec(it.value))) as RSAPublicKey
    }
    .map {
      NimbusReactiveJWTDecoder.withPublicKey(it)
        .signatureAlgorithm(SignatureAlgorithm.form("RS256")).build()
    }.block()

如果 属性 给定,则代码受自动配置 bean 启发。

目前我能找到的最佳解决方案。