技术标签: SpringBoot
OAuth2
所生成的AccessToken
以及RefreshToken
都存在过期时间,当在有效期内才可以拿来作为会话身份发起请求,否者认证中心
会直接拦截无效请求提示已过期
,那么我们怎么修改这个过期时间来满足我们的业务场景呢?
目前一线大厂所使用的的AccessToken
的有效期一般都是7200秒
,也就是2小时
,而且有获取的次数限制,所以发起请求的一方必须通过一定的形式保存到本地,以方便下一次发起请求时,写入请求的header
或者作为参数携带。
本章来讲解下使用ApiBoot OAuth
组件该怎么去设置AccessToken
的过期时间,针对memory
(内存方式)、jdbc
(数据库)这两种方式来讲解,更多使用请参考官方文档:
ApiBoot OAuth
在memory
存储方式下为每一个客户端
都提供了一个默认的AccessToken
有效时长,该配置在org.minbox.framework.api.boot.autoconfigure.oauth.ApiBootOauthProperties
,相关源码如下所示:
/**
* Oauth2 Client
* Used to configure multiple clients
*/
@Data
public static class Client {
/**
* oauth2 client id
*/
private String clientId = "ApiBoot";
/**
* oauth2 client secret
*/
private String clientSecret = "ApiBootSecret";
/**
* oauth2 client grant types
* default value is "password,refresh_token"
*/
private String[] grantTypes = new String[]{"password", "refresh_token"};
/**
* oauth2 client scope
* default value is "api"
*/
private String[] scopes = new String[]{"api"};
/**
* oauth2 application resource id
* default value is "api"
*/
private String[] resourceId = new String[]{"api"};
/**
* oauth2 access token validity seconds
* default value is 7200 second
*/
private int accessTokenValiditySeconds = 7200;
}
Client
是ApiBootOauthProperties
的一个内部类,主要是提供了OAuth2 客户端
的相关配置字段,通过spring-boot-configuration-processor
依赖将该类自动解析成配置元数据
,这样我们在application.yml
输入api.xxx
时可以得到相应的提示。
在Client
内部类中有一个字段accessTokenValiditySeconds
,通过该字段我们来修改该客户端下所有用户生成的AccessToken
默认过期时长,值得注意的是,这里的配置值时间单位是秒
,7200秒 = 2小时
。
在上面说到了,内存方式时ApiBoot OAuth
会使用ApiBootOauthProperties#Client
内部类的accessTokenValiditySeconds
字段来配置过期时间,所以我们只需要在application.yml
添加如下配置即可:
api:
boot:
oauth:
clients:
- clientId: minbox
clientSecret: chapter
# 配置客户端Token过期时长,单位:秒
accessTokenValiditySeconds: 43200
security:
users:
- username: yuqiyu
password: 123123
在上面配置中,我们添加了一个在内存存储的minbox
客户端,设置accessTokenValiditySeconds
过期时间字段为43200秒 = 12小时
。
JDBC
方式是ApiBoot OAuth
无法控制的,因为OAuth2
当使用JDBC
方式进行存储客户端、令牌等信息时,都是通过OAuth2
提供的固定的表进行操作,正因为如此我们只需要修改oauth_client_details
表内每一条client
信息的access_token_validity
字段的值即可,时间单位同样也是秒
,如下图所示:
OAuth2
提供的MySQL
版本的建表语句请访问ApiBoot OAuth Starter查看。
下面来测试下修改后的过期时间是否已经生效,我们先来启动本章的项目示例。
通过CURL
的方式获取AccessToken
,如下所示:
➜ ~ curl -X POST minbox:chapter@localhost:9090/oauth/token -d 'grant_type=password&username=yuqiyu&password=123123'
{"access_token":"41127985-1b31-4413-ac9f-30d5e26f4aaf","token_type":"bearer","refresh_token":"0a39ca6a-8697-4f80-9bb1-ac59894a45dd","expires_in":43199,"scope":"api"}
通过PostMan
方式获取AccessToken
如下图所示:
我们根据结果可以看到,由原本默认的7200
修改成了我们在application.yml
配置的43200
(结果中的43199
是因为生成token耗时差导致的)。
ApiBoot
的宗旨就是化繁为简,能使用配置简单搞定的事情,绝不拖泥带水,赶快分享下本篇文章吧,让更多人得到帮助,非常感谢~~~
ApiBoot OAuth
可以一次配置多个客户端,并且为每一个客户端配置不同的过期时间。
如果您喜欢本篇文章请为源码仓库点个Star
,您的点赞是对我最大的支持,谢谢!!!本篇文章示例源码可以通过以下途径获取,目录为apiboot-oauth-set-token-expire-time
:
作者个人 博客
使用开源框架 ApiBoot 助你成为Api接口服务架构师
文章浏览阅读3k次。文章目录前言安装步骤1.准备工作2.下载ansible安装包3.安装3.1 修改压缩包3.2 解压缩3.3 安装总结前言此Win10安装ansible方案,只是为了解决win环境下开发python项目时,涉及ansible模块引用报错的问题。如果想在win环境下安装ansible进行客户端管理或playbook开发,本文所述方案不适合!可了解一下Cygwin或Windows Subsystem for Linux。安装步骤在win环境下直接使用pip install ansible安装肯定是会_windows下载ansible安装包
文章浏览阅读1.1k次。今天帮公司搞一个mac的开发项目,就是最简单的用webview套一个网页就可以了。代码就一句话可惜,报了这堆错误,而且webview一片空白。后来在网上终于找到了解决方法,在这里分享给大家。
文章浏览阅读2.4k次。【编者Peter Ye按】再开始正文之前,先分享我最近思考得出的一段话: 互联网解决了信息随时分享,移动互联网解决了信息随地分享,物联网解决了信息随物分享,而构建在三者基..._软件定义存储的空间
文章浏览阅读1.1w次,点赞5次,收藏10次。昨天由于项目需求,需要使用redis分布式锁,在网上找了半天,也没有找到一个简单的教程,经过自己研究,了解简单使用方法,都可以直接拿过来自己用,下面我就发出来给大家分享一下。首先下载 github.com/garyburd/redigo,因为这个分布式锁是根据上面所实现; 下载 gopkg.in/redsync.v1这个就是实现分布式锁的源代码(如果测试需要下载 github.c..._can be used to set the clock drift factor.
文章浏览阅读555次。作者 | 数据分析1480来源 | lsxxx2011(1) 无监督和有监督算法的区别?有监督学习:对具有概念标记(分类)的训练样本进行学习,以尽可能对训练样本集外的数据进行标记(分类)预测。这里,所有的标记(分类)是已知的。因此,训练样本的岐义性低。无监督学习:对没有概念标记(分类)的训练样本进行学习,以发现训练样本集中的结构性知识。这里,所有的标记(分..._cda level Ⅲ 面试题
文章浏览阅读10w+次,点赞193次,收藏947次。Tomcat安装及配置教程(保姆级)【最新史上最全版】tomcat保姆级安装教程Tomcat安装教程(以tomcat-9.0.62为例:)1.下载安装包可以从官网下载安装包:(1)从官网下载输入网址进入官网sshttp://tomcat.apache.org/_tomcat安装及配置教程
文章浏览阅读251次。公有继承基类和派生类之间构造和析构、赋值和拷贝构造函数的关系(上)1、公有继承基类和派生类之间构造函数的关系如果一个类Text在公有继承了Object类,在创建一个Text对象t时会先调用Object的构造函数,然后再调用Text的构造函数,不论Text的形参列表声明中Object的声明在前在后。代码测试:#include<iostream>using namespace std;class Object{ private: int val; public: Object_公有继承 构造
文章浏览阅读504次。前言随着App的用户界面的内容越来越丰富,再强的手机可能都无法同时渲染复杂的UI界面和保证流畅的体验。所以,我们这些程序猿=。=在写代码的时候就要注意,如何尽可能提高用户的操作流畅性。之前的做的项目,青桔音乐iOS客户端里面的首页就是一个类似微信朋友圈的“动态”页面,大致如下:青桔动态页面如果是你,你会怎么实现这个页面呢?这还用问,当然是用UITableView+自定义_android uitableview优化
文章浏览阅读348次。文章目录项目Maven聚合rpc 模块创建继承pom 依赖配置relativePath元素可以通过继承的元素有以下这些依赖管理(dependencyManagement)项目github 建个仓库执行 git clone 克隆项目到本地idea 新建项目Maven聚合<modules> <module>模块1</module> ..._pom resources子模块继承
文章浏览阅读4.2k次。问题全部为:cv2.error: OpenCV(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391: error: (-215:Assertion failed) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function 'getPerspectiveTransform'出现在使用cv2.getPerspectiveTransfo_cv2.error: opencv(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391: er
文章浏览阅读329次。为了提高服务器的性能和工作的负载能力,企业通常会采用DNS服务器、网络地址转换等技术来实现多服务器的负载平衡,今天这篇文章是爱站技术频道小编为大家带来的实例演示多台主机使用DNS服务器实现网络负载均衡,一起来了解一下吧!实例演示多台主机使用DNS服务器实现网络负载均衡一、启用循环以WindowsServer2003系统为例,在DNS服务器中,依次点击“开始→程序→管理工具→DNS”选项,进入DNS..._dns负载均衡怎么配置
文章浏览阅读4k次,点赞4次,收藏15次。我下载dlib包和face_recognition包是为了完成我的《Opencv项目实战: 07 人脸识别和考勤系统》,那么这一篇将作为一个前篇,完成项目包的搭建。_python下载dlib