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. bzoj2049 Cave 洞穴勘测 lct

    这里比上次多了几个操作. 1. make_root(u) 换根节点, 先access(u), 再splay(u),将u移动到splay树的最顶上, 现在这棵splay对于root来说 只有左子树上有东 ...

  2. atcoder C - Snuke and Spells(模拟+思维)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...

  3. hdu 5495 LCS(并查集)

    Problem Description You are given two sequence {a1,a2,...,an} and {b1,b2,...,bn}. Both sequences are ...

  4. CodeForces 982 C Cut 'em all!

    Cut 'em all! 题意:求删除了边之后,剩下的每一块联通块他的点数都为偶数,求删除的边最多能是多少. 题解:如果n为奇数,直接返回-1,因为不可能成立.如果n为偶数,随意找一个点DFS建树记录 ...

  5. 《2019面向对象程序设计(java)课程学习进度条》

    学习资源 1.教材P28-P76 2.第3章教学课件3.1-3.8 3.corejava.zip中第3章示例程序3-1—3-5 4.Eclipse简明教程.pdf 5.MOOC & 视频:浙江 ...

  6. 2019CSP初赛基础知识整理

    一.硬件 计算机发展:   年代 元件 第一代 1946~1958 电子管 第二代 1959~1964 晶体管 第三代 1965~1970 集成电路 第四代 1971~? 大规模集成电路 世界上第一台 ...

  7. Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则

    Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则 前面几篇文章较为详细的介绍了Sentinel的使用姿势,还没看过的小伙伴可以访问以下链接查看: &l ...

  8. yum rpm apt-get wget 辨析

    1)wget: 类似于迅雷,是一种下载工具,通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理名字是World Wide Web”与“get”的结合.类似于cur ...

  9. 松软科技课堂:SQL--UNIQUE约束

    SQL UNIQUE 约束(文章来源:松软科技-www.sysoft.net.cn-) UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提 ...

  10. Day 21 进程管理

    1.什么是进程 比如: 开发写的代码我们称为程序,那么将开发的代码运行起来.我们称为进程. 总结一句话就是: 当我们运行一个程序,那么我们将运行的程序叫进程. PS1: 当程序运行为进程后,系统会为该 ...