Java - 如何将 HS256 与 JwtAccessTokenConverter 一起使用
Java - How to use HS256 with JwtAccessTokenConverter
我目前正在学习如何使用微服务实现 oauth2 身份验证和授权的教程:
http://stytex.de/blog/2016/02/01/spring-cloud-security-with-oauth2/
我让它按原样工作,但我真的很难弄清楚如何使用 HS256 而不是当前正在使用的 RSA256 算法来实现 jwt。
我想我已经将它缩小到 Oauth2Configuration 中身份验证服务器的这段代码 class:
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore()).tokenEnhancer(jwtTokenEnhancer()).authenticationManager(authenticationManager);
}
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtTokenEnhancer());
}
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("jwt.jks"), "mySecretKey".toCharArray());
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt"));
return converter;
}
更具体地说,我相信我必须使用 jwtTokenEnhancer 方法更改一些内容。
我查看了文档,但没有看到与 HS256 相关的任何内容,因此非常感谢您提供任何形式的说明。
您正在将 JwtAccessTokenConverter 配置为使用密钥对,因此它将使用 RSA。如果你想 setSigningKey 它将使用 HMACSHA256。
看看 code :
public void setSigningKey(String key) {
Assert.hasText(key);
key = key.trim();
this.signingKey = key;
if (isPublic(key)) {
signer = new RsaSigner(key);
logger.info("Configured with RSA signing key");
}
else {
// Assume it's a MAC key
this.verifierKey = key;
signer = new MacSigner(key);
}
}
您可以查看格式是否不是 RSA,然后使用 MacSigner 并且 MacSigner 实现 HMACSHA256
我目前正在学习如何使用微服务实现 oauth2 身份验证和授权的教程:
http://stytex.de/blog/2016/02/01/spring-cloud-security-with-oauth2/
我让它按原样工作,但我真的很难弄清楚如何使用 HS256 而不是当前正在使用的 RSA256 算法来实现 jwt。
我想我已经将它缩小到 Oauth2Configuration 中身份验证服务器的这段代码 class:
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore()).tokenEnhancer(jwtTokenEnhancer()).authenticationManager(authenticationManager);
}
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtTokenEnhancer());
}
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("jwt.jks"), "mySecretKey".toCharArray());
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt"));
return converter;
}
更具体地说,我相信我必须使用 jwtTokenEnhancer 方法更改一些内容。
我查看了文档,但没有看到与 HS256 相关的任何内容,因此非常感谢您提供任何形式的说明。
您正在将 JwtAccessTokenConverter 配置为使用密钥对,因此它将使用 RSA。如果你想 setSigningKey 它将使用 HMACSHA256。
看看 code :
public void setSigningKey(String key) {
Assert.hasText(key);
key = key.trim();
this.signingKey = key;
if (isPublic(key)) {
signer = new RsaSigner(key);
logger.info("Configured with RSA signing key");
}
else {
// Assume it's a MAC key
this.verifierKey = key;
signer = new MacSigner(key);
}
}
您可以查看格式是否不是 RSA,然后使用 MacSigner 并且 MacSigner 实现 HMACSHA256