Spring Cloud: JWT加密 keytool生成jks文件

北慕城南 提交于 2020-08-05 16:12:04

通过keytool生成jks文件:

运行下面的命令生成私钥,姓名国家啥的可以不填

keytool -genkey -alias ffzs-jwt -keyalg RSA -keysize 1024 -keystore ffzs-jwt.jks -validity 365 -keypass ffzs00 -storepass ffzs00

在上面的命令中,-alias选项为别名,-keypass和-storepass为密码选项,-validity为配置jks文件的过期时间(单位:天)。

获取的jks文件作为私钥,是如何解密JWT的呢?这时就需要使用jks文件的公钥。获取jks文件的公钥命令如下:

keytool -list -rfc --keystore ffzs-jwt.jks | openssl x509 -inform pem -pubkey

输入密码之后生成公钥可私钥

在这里插入图片描述

auth端修改:

这个不重要,我们将生成的ffzs-jwt.jks文件放到resources目录

在这里插入图片描述

修改jwtTokenEnhancer方法如下,通过jks文件获取公钥来生成token

    @Bean
    protected JwtAccessTokenConverter jwtTokenEnhancer() {
        KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("ffzs-jwt.jks"), "ffzs00".toCharArray());
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setKeyPair(keyStoreKeyFactory.getKeyPair("ffzs-jwt"));
        return converter;
    }

其中KeyStoreKeyFactory中的分别是jks文件,和密码

service端修改:

配置文件中添加获取token_key路径即可:

  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: http://localhost:8731/oauth/token_keys

并注释掉之前的tokenStore:

在这里插入图片描述

原理也很简单,之前是通过给定的singkey作为生成token和解码token的key,现在通过公钥来完成这个任务,所以还有另一中更改方法,就是把公钥放到一个文件中,或是直接放到service端的配置文件中获取,而不是通过远程获取:

在这里插入图片描述

测试

auth端

获取token正常:

在这里插入图片描述

获取token_key:

在这里插入图片描述

service端:

也可以正常获取

在这里插入图片描述

通过Gateway获取token:

auth,gateway,service都注册到consul上:

在这里插入图片描述

当Gateway中的locator开启以后,可以通过使用consul上注册服务名称为前缀进行路由:

http://localhost:8730/consul-auth/oauth/token_key 就是访问的 consul-auth 服务上的 /oauth/token_key:

在这里插入图片描述

测试一下获取token:

在这里插入图片描述

check_token, 获取到token解析后的详细内容:

在这里插入图片描述

refresh_token,token过期以后可以通过refresh_token获取新的token:

在这里插入图片描述

需要注意的是refresh_token,check_token需要携带登入信息才能访问,就是Authorization中设置的clientid和secret:

在这里插入图片描述
在这里插入图片描述

通过Gateway访问 service上的login,正常访问:

在这里插入图片描述

使用zipkin看一下链路情况,可见链路情况gateway->service->auth,当然一般不这么使用,直接使用gateway获取token缓存起来即可,这里只是想展示一下链路效果:

在这里插入图片描述

由于链路通过rabbitMQ连接,可见都已经连接上

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!