JWT转换器

前面的例子中,都是在授权服务配置类中配置了一个很简单的jwt转换器,如下:

可以看到我们只用setSigningKey方法配置了一个秘钥,这里使用的是简单的对称加密的方式来加密jwt内容,同时资源服务器中使用的也是同样的秘钥配置jwt转换器:

除了对称加密的方式,生产环境使用非常多的是更加安全的非对称加密的方式来加密jwt。

生成公私钥

公私钥对可以使用jdk的命令 keytool 来生成,首先来看一下这个命令下有哪些参数:

中文的参数说明很清晰,我们需要使用 -genkeypair 参数生成秘钥对。再来看一下 keytool -genkeypair 之下还有哪些参数:

这些都是设置密钥对的属性参数。下面我们来使用keytool命令生成JKS(Java KeyStore)文件,命令如下:

  • keytool -genkeypair -alias oauth2 -keyalg RSA -keypass oauth2 -keystore oauth2.jks -storepass oauth2

从参数说明可以看出,别名为 oauth2,秘钥算法为 RSA,秘钥口令为 oauth2,秘钥库(文件)名称为 oauth2.jks,秘钥库口令为oauth2。输入命令回车后,后面还有七个问题需要回答,分别是(问题后面括号内的内容是我的回答):

  • 您的名字与姓氏是什么?(oauth2)

  • 您的组织单位名称是什么?(oauth2)

  • 您的组织名称是什么?(oauth2)

  • 您所在的城市或区域名称是什么?(bj)

  • 您所在的省/市/自治区名称是什么?(bj)

  • 该单位的双字母国家/地区代码是什么?(cn)

  • CN=oauth2, OU=oauth2, O=oauth2, L=bj, ST=bj, C=cn是否正确?(是)

最后一个回答 是 输入完回车后,jks文件就生成了,具体过程如下:

生成的秘钥库文件如下:

生成完成后,将jks文件拷贝到resources文件夹下即可。

修改授权服务配置类

这里只需要修改jwt转换器即可:

其中,"oauth2".toCharArray() 这里配置的是口令,getKeyPair("oauth2") 这里配置的是别名。

根据jks文件获取公钥

输入命令:

  • keytool -list -rfc -keystore oauth2.jks -storepass oauth2

会打印出公钥:

在资源服务的resources文件夹下面,新建一个pub.txt文件,将公钥复制进去:

这里复制的内容就是两行等号之间的内容。

修改资源服务配置类

资源服务配置类也只需要修改jwt转换器配置:

setSigningKey方法支持对称和非对称加密,它会对秘钥进行判断,来看一下源码:

测试

jwt转换器加密方式修改完成了,测试流程按照以前的方式获取令牌,访问受保护资源即可:

访问接口:

代码地址:https://gitee.com/blueses/spring-boot-security 26 27

本文由博客一文多发平台 OpenWrite 发布!

SpringBootSecurity学习(21)前后端分离版之OAuth2.0非对称加密的更多相关文章

  1. SpringBootSecurity学习(15)前后端分离版之 OAuth2.0简单示例

    OAuth2.0 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者.客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌.客户端通过令牌,去请求数据.也就是说, ...

  2. SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍

    登录总结 前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了.securit ...

  3. SpringBootSecurity学习(16)前后端分离版之 OAuth2.0 加密配置

    示例代码的改进 前面使用spring cloud security和spring cloud oauth2写了一个第三方授权的例子,例子非常的简单,主要目的是用来熟悉OAuth2.0 申请授权的整个流 ...

  4. SpringBootSecurity学习(17)前后端分离版之 OAuth2.0 数据库(JDBC)存储客户端

    自动批准授权码 前面我们授权的流程中,第一步获取授权码的时候,都会经历一个授权是否同意页面: 这个流程就像第三方登录成功后,提问是否允许获取昵称和头像信息的页面一样,这个过程其实是可以自动同意的,需要 ...

  5. SpringBootSecurity学习(19)前后端分离版之OAuth2.0 token的存储和管理

    内存中存储token 我们来继续授权服务代码的下一个优化.现在授权服务中,token的存储是存储在内存中的,我们使用的是 InMemoryTokenStore : 图中的tokenStore方法支持很 ...

  6. SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式

    密码模式 前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式.首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持: 因此我们启动项目,直接使用密码模式即可,访问地 ...

  7. SpringBootSecurity学习(18)前后端分离版之 OAuth2.0 数据库(MyBatis)存储客户端

    使用Mybatis查询客户端信息 前面的例子使用了默认的jdbc配置来动态从数据库查询客户端信息,下面来改用更加灵活的mybatis来实现,改用mybatis,首先pom中换成mybatis的依赖: ...

  8. SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新token

    刷新token 前面的例子和配置都是从头开始申请授权码和令牌,现在来看一下如何根据获取令牌时,回参中的 refresh_token 来刷新令牌.现在在项目中配置的是内存模式的默认用户名密码,第一步先改 ...

  9. SpringBootSecurity学习(22)前后端分离版之OAuth2.0自定义授权码

    使用JDBC维护授权码 前面的代码中,测试流程第一步都是获取授权码,然后再携带授权码去申请令牌,授权码示例如下: 产生的授权码默认是 6 位的,产生以后并没有做任何管理,可以说是一个临时性的授权码,o ...

随机推荐

  1. hdu 1269 迷宫城堡(trajan判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:略 题解:trajan模版直接求强连通分量. #include <iostream& ...

  2. 模板汇总——快读 fread

    struct FastIO { ; int wpos; char wbuf[S]; FastIO() : wpos() { } inline int xchar() { static char buf ...

  3. SpringAop应用

    1. 引言 为什么要使用Aop?贴一下较为官方的术语: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能 ...

  4. 精品自用IDEA插件吐血推荐

    Alibaba Java Coding Guidelines 该插件集成了Alibaba代码编程规范,可以帮你找出你的代码怪味道 .gitignore 当你使用Git作为版本工具的时候,想要快速的添加 ...

  5. 011 实例2-Python蟒蛇绘制

    目录 一."Python蟒蛇绘制"问题分析 1.1 Python蟒蛇绘制 二."Python蟒蛇绘制"实例编写 三.运行效果 3.1 程序关键 四." ...

  6. window下载安装maven

    Maven官网下载地址:https://maven.apache.org/download.cgi,这里我们下载zip包即可  解压到安装目录下  新建环境变量MAVEN_HOME,复制Maven安装 ...

  7. [Vue 牛刀小试]:第十七章 - 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍

    一.前言 在上一章中,我们开始通过 Vue CLI 去搭建属于自己的前端 Vue 项目模板,就像我们 .NET 程序员在使用 asp.net core 时一样,我们更多的会在框架基础上按照自己的开发习 ...

  8. 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=……”

    emmmm~ 这是一个让人烦躁有悲伤的问题~ 背景 我也不知道什么原因,用着用着,正好好的,就突然报了这种问题~ 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0 ...

  9. js操作cookie(创建、读取、删除)方法总结

    js操作cookie,可以通过开源的插件实现,方便快捷,兼容性好,同样也可以自己写: 此文主要介绍两个常用的插件: Js.cookie.js 和 jQuery.cookie.js 0.Js.cooki ...

  10. ES6-数组的新方法

    1.Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型. Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7)创建一个 ...