Java - 如何将HS256与JwtAccessTokenConverter一起使用

时间:2017-03-15 14:50:57

标签: java spring spring-security spring-security-oauth2 jjwt

我目前正在学习如何使用微服务实现oauth2身份验证和授权:

http://stytex.de/blog/2016/02/01/spring-cloud-security-with-oauth2/

我让它按原样运行,但我正在努力弄清楚如何使用HS256而不是当前使用的RSA256算法来实现jwt。

我想我已经将它缩小到Oauth2Configuration类中的身份验证服务器的代码片段:

 @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有关的内容,因此我们将非常感谢任何形式的澄清。

1 个答案:

答案 0 :(得分:0)

您正在配置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