看完这篇文章,你如果还不知道怎么设置Oauth2令牌过期时间算我输_oauth2.0如何设置存储token时间-程序员宅基地

技术标签: SpringBoot  

OAuth2所生成的AccessToken以及RefreshToken都存在过期时间,当在有效期内才可以拿来作为会话身份发起请求,否者认证中心会直接拦截无效请求提示已过期,那么我们怎么修改这个过期时间来满足我们的业务场景呢?

目前一线大厂所使用的的AccessToken的有效期一般都是7200秒,也就是2小时,而且有获取的次数限制,所以发起请求的一方必须通过一定的形式保存到本地,以方便下一次发起请求时,写入请求的header或者作为参数携带。

本章来讲解下使用ApiBoot OAuth组件该怎么去设置AccessToken的过期时间,针对memory(内存方式)、jdbc(数据库)这两种方式来讲解,更多使用请参考官方文档:

默认有效时长

ApiBoot OAuthmemory存储方式下为每一个客户端都提供了一个默认的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;
}

ClientApiBootOauthProperties的一个内部类,主要是提供了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方式

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接口服务架构师

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42033269/article/details/103502833

智能推荐

Win10安装Ansible Python包_windows下载ansible安装包-程序员宅基地

文章浏览阅读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安装包

macOS开发,发现webview连接不上网络。。已解决-程序员宅基地

文章浏览阅读1.1k次。今天帮公司搞一个mac的开发项目,就是最简单的用webview套一个网页就可以了。代码就一句话可惜,报了这堆错误,而且webview一片空白。后来在网上终于找到了解决方法,在这里分享给大家。

当软件定义存储(SDS)遇见区块链(BlockChain)-程序员宅基地

文章浏览阅读2.4k次。【编者Peter Ye按】再开始正文之前,先分享我最近思考得出的一段话: 互联网解决了信息随时分享,移动互联网解决了信息随地分享,物联网解决了信息随物分享,而构建在三者基..._软件定义存储的空间

golang使用redis分布式锁_can be used to set the clock drift factor.-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏10次。昨天由于项目需求,需要使用redis分布式锁,在网上找了半天,也没有找到一个简单的教程,经过自己研究,了解简单使用方法,都可以直接拿过来自己用,下面我就发出来给大家分享一下。首先下载 github.com/garyburd/redigo,因为这个分布式锁是根据上面所实现; 下载 gopkg.in/redsync.v1这个就是实现分布式锁的源代码(如果测试需要下载 github.c..._can be used to set the clock drift factor.

22道机器学习常见面试题目汇总!(附详细解答)-程序员宅基地

文章浏览阅读555次。作者 | 数据分析1480来源 | lsxxx2011(1) 无监督和有监督算法的区别?有监督学习:对具有概念标记(分类)的训练样本进行学习,以尽可能对训练样本集外的数据进行标记(分类)预测。这里,所有的标记(分类)是已知的。因此,训练样本的岐义性低。无监督学习:对没有概念标记(分类)的训练样本进行学习,以发现训练样本集中的结构性知识。这里,所有的标记(分..._cda level Ⅲ 面试题

Tomcat安装及配置教程(保姆级)【最新史上最全版】-程序员宅基地

文章浏览阅读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_公有继承 构造

提升UITableView性能-复杂页面的优化_android uitableview优化-程序员宅基地

文章浏览阅读504次。前言随着App的用户界面的内容越来越丰富,再强的手机可能都无法同时渲染复杂的UI界面和保证流畅的体验。所以,我们这些程序猿=。=在写代码的时候就要注意,如何尽可能提高用户的操作流畅性。之前的做的项目,青桔音乐iOS客户端里面的首页就是一个类似微信朋友圈的“动态”页面,大致如下:青桔动态页面如果是你,你会怎么实现这个页面呢?这还用问,当然是用UITableView+自定义_android uitableview优化

maven 聚合、继承详解_pom resources子模块继承-程序员宅基地

文章浏览阅读348次。文章目录项目Maven聚合rpc 模块创建继承pom 依赖配置relativePath元素可以通过继承的元素有以下这些依赖管理(dependencyManagement)项目github 建个仓库执行 git clone 克隆项目到本地idea 新建项目Maven聚合<modules> <module>模块1</module> ..._pom resources子模块继承

cv2.error: OpenCV(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391-程序员宅基地

文章浏览阅读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

网络位置多频服务器,实例演示多台主机使用DNS服务器实现网络负载均衡-程序员宅基地

文章浏览阅读329次。为了提高服务器的性能和工作的负载能力,企业通常会采用DNS服务器、网络地址转换等技术来实现多服务器的负载平衡,今天这篇文章是爱站技术频道小编为大家带来的实例演示多台主机使用DNS服务器实现网络负载均衡,一起来了解一下吧!实例演示多台主机使用DNS服务器实现网络负载均衡一、启用循环以WindowsServer2003系统为例,在DNS服务器中,依次点击“开始→程序→管理工具→DNS”选项,进入DNS..._dns负载均衡怎么配置

Python3.7最简便的方式解决下载dlib和face_recognition的问题_python下载dlib-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏15次。我下载dlib包和face_recognition包是为了完成我的《Opencv项目实战: 07 人脸识别和考勤系统》,那么这一篇将作为一个前篇,完成项目包的搭建。_python下载dlib