Nel*_*ves 5 spring-security spring-boot spring-security-oauth2 spring-cloud-security
我有一个使用 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());
}
Run Code Online (Sandbox Code Playgroud)
登录显然工作正常,但是当我运行该项目时,我收到此警告:
WARN 16804 --- [main] o.s.s.o.p.t.s.JwtAccessTokenConverter : Unable to create an RSA verifier from verifierKey (ignoreable if using MAC)
Run Code Online (Sandbox Code Playgroud)
我该如何摆脱这个警告?
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)");
}
Run Code Online (Sandbox Code Playgroud)
RsaVerifier 构造函数中会引发异常,因为它尝试将验证密钥解析为 RSA 公钥,而您可能正在使用 MAC 密钥:
public RsaVerifier(String key) {
this(RsaKeyHelper.parsePublicKey(key.trim()), RsaSigner.DEFAULT_ALGORITHM);
}
Run Code Online (Sandbox Code Playgroud)
在这里,RsaKeyHelper将失败地尝试将提供的密钥解析为既不是 ssh 也不是 pem 密钥,因为它实际上不是那种类型的密钥。
假定此验证密钥的值与作为 MAC 密钥的setSigningKey 方法的参数提供的签名密钥相同。
如果您实际上正在使用 RSA 密钥,则可以使用setVerifierKey或setKeyPair方法来提供加密 RSA 材料。
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |