4

我有一个使用 Spring Cloud OAuth2 的授权服务器 Spring Boot 项目。我将这些 bean 用于 JWT:

@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter tokenConverter = new JwtAccessTokenConverter();
    tokenConverter.setSigningKey("my-test-jwt-secret");
    return tokenConverter;
}

@Bean
public JwtTokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
}

登录显然工作正常,但是当我运行项目时,我收到了这个警告:

WARN 16804 --- [main] o.s.s.o.p.t.s.JwtAccessTokenConverter    : Unable to create an RSA verifier from verifierKey (ignoreable if using MAC)

我如何摆脱这个警告?

4

1 回答 1

4

AJwtAccessTokenConverter可以配置为使用 MAC 密钥或 RSA 密钥对进行签名生成和验证。

正如警告中提供的消息所示,您可能使用的是 MAC 密钥而不是 RSA 密钥对。因此,它可能不会认为有问题,但由于库的实现方式,恐怕您无法摆脱警告。

如您在 的源代码中所见,JwtAccessTokenConverter尝试创建RsaVerifier签名验证时会发出警告:

SignatureVerifier verifier = new MacSigner(verifierKey);
try {
  verifier = new RsaVerifier(verifierKey);
}
catch (Exception e) {
  logger.warn("Unable to create an RSA verifier from verifierKey (ignoreable if using MAC)");
}

RsaVerifier 构造函数中引发了异常,因为它正在尝试将验证密钥解析为 RSA 公钥,而您可能正在使用 MAC 密钥:

public RsaVerifier(String key) {
  this(RsaKeyHelper.parsePublicKey(key.trim()), RsaSigner.DEFAULT_ALGORITHM);
}

在这里,RsaKeyHelper将不成功地尝试将提供的密钥解析为既不是 ssh 也不是 pem 密钥,因为它实际上不是那种类型的密钥。

假定此验证密钥的值与作为MAC 密钥的setSigningKey 方法的参数提供的签名密钥相同。

如果您实际上正在使用 RSA 密钥,则可以使用setVerifierKeysetKeyPair方法来提供加密 RSA 材料。

于 2021-05-20T22:23:05.613 回答