SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

发布时间:2021-09-28 09:34:14 作者:柒染
来源:亿速云 阅读:195

这篇文章将为大家详细讲解有关SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

内存中存储token

我们来继续授权服务代码的下一个优化。现在授权服务中,token的存储是存储在内存中的,我们使用的是 InMemoryTokenStore :

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

图中的tokenStore方法支持很多种令牌的存储方式,来看一下:

默认的 InMemoryTokenStore 方式存储也是可以进行查询和删除的,我们来看一下,首先将 InMemoryTokenStore 配置为一个bean:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后配置时调用这个bean:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

我们来看一下 InMemoryTokenStore 类中对token有哪些操作:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

从方法的名字可以看出,对token的增删改查操作基本都是齐全的,我们来写两个方法查询和删除token:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

类中注入的InMemoryTokenStore正是前面定义的bean,只有这样才能操作内存中的token,下面来看一下测试,先根据前面的流程,申请到令牌,然后查询令牌:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后测试删除令牌:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后再根据令牌查询受保护的资源,可以发现无法访问了。

使用内存的方式虽然基本的功能都在,但是缺点上面也提到了,就是只能工作在单服务器上面,无法默认实现token共享,另外测试环境使用内存存储也是比较好的选择。

Redis存储token

令牌除了可以存储在内存中,还可以存储在公共的地方,比如redis中,这样单服务器数据不同步的问题可以解决。存储在redis中首先要引入依赖:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后配置数据源:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后修改授权配置类,配置redis存储的bean:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

这样redis存储token的配置基本就完成了,然后仿照前面的内存存储操作,写两个接口用来查询和删除redis中的token:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

启动项目,按照之前的流程获取令牌,访问保护资源,然后查看redis,可以看到里面存储了我们获取的令牌:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

来看查询token接口的效果:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

来看删除token接口的效果:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

删除后,redis中的token也删除了:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

只剩下三个刷新的key。

JDBC存储token

使用jdbc存储token的方式也可以做到token共享,操作类是 JdbcTokenStore ,我们来看一下这个类:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

类中定义了好多默认操作的sql语句,总共涉及到两张表:oauth_access_token和oauth_refresh_token(如果客户端的grant_type不支持refresh_token,则不会使用该表),来看一下 oauth_access_token 表的结构:

来看一下 oauth_refresh_token 表的字段结构:

在数据库中创建这两张表:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

然后在pom中引入jdbc依赖,在配置文件中配置数据源,此处不再演示。下一步修改授权配置类:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

最后仿照前面,写两个查询和删除token的接口:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

使用数据库存储token,比前面两种方式多了很多方法和操作,来看 JdbcTokenStore 类:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

除了增删改查的操作多了几个方法,包括sql语句的默认写法也有覆盖的set方法。下面来测试,首先按照前面的流程获取token令牌,然后查询数据库:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

可以看到数据库中多了两条token数据,看一下查询token接口:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

删除接口:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

看一下删除接口调用的方法源码:

SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的

只是删除了令牌,更新token的记录还会保留。

代码地址: https://gitee.com/blueses/spring-boot-security 23 24

关于SpringBootSecurity中OAuth2.0 token的存储和管理是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. 理解Oauth2.0
  2. ASP.NET MVC中怎么使用Oauth2.0验证身份

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot oauth2.0 token

上一篇:分布式爬虫怎么使用代理IP

下一篇:前端vuejs是不是语言

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》