有一天老板问我,我们系统的token是什么加密方式。
不知道,我只知道是jwt。尴尬,赶紧去翻下代码
找到我们的配置类
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter
继承自AuthorizationServerConfigurerAdapter
/**
* 加密jwt
* @return
*/
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter(){
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAccessTokenConverter.setKeyPair(keyPair());
return jwtAccessTokenConverter;
}
/**
* 读取resource下的jwt.jks文件
* @return
*/
@Bean
public KeyPair keyPair(){
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("test.jks"),"123456".toCharArray());
return keyStoreKeyFactory.getKeyPair("test","123456".toCharArray());
}
上述代码中,JwtAccessTokenConverter
使用了密钥库和密钥对,这是非对称加密的特征。
到这里我的答案找到,是非对称加密,那什么是对称加密呢,
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("your-signing-key"); // 使用对称密钥
return converter;
}
好,我建议使用非对称加密。
最后说下这个jks文件,
查看文件
keytool -list -v -keystore your-keystore.jks
创建文件
keytool -genkeypair -alias new-alias -keyalg RSA -keysize 2048 -keystore new-keystore.jks
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("new-keystore.jks"), "new-keystore-password".toCharArray());
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("new-alias"));
return converter;
}