- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Keycloak会话管理中,获取到accessToken和refreshToken后,基于accessToken交换用户数据或者参与KeycloakAPI的请求,当accessToken过期的时候,可使用refreshToken去交换新的accessToken和refreshToken.
这块根据之前的refresh_token就得到了一个新的token对象 。
access_token超时时间expires_in,在realms settings中,选择tokens进行配置,对Access Token Lifespan进行设置.
这个用户会话,对应的sessionId(session_state)可以在浏览器cookie中找到,或者在kc管理后台的用户-》会话中查看,这个sessionId被客户端访问,都会刷新这个“开始”时间,和“最后访问”时间,当你的access_token过期后,你通过refresh_token去刷新access_token时,这个“最后访问”时间也会更新,如图 。
如果用户访问资源,在token过期,而refresh_token(sso session max)未过期时,你可以通过refresh_token来获取新的token,这时会有新的会话产生;但如果refresh_token也过期时,它将跳转到登录页,从新进行认证,会话也就被删除了.
领域设置->Tokens中,有四个选项用来控制refresh_token的超时时间 。
下图的4个选项,配置是有问题的,正确的配置应该是最长时间大于空闲时间,下面配置无意义,这时有效性使用4个选项中最小的值【sso会话空闲时间,sso会话最长时间,client session Idle和client session Max】 。
如果正常配置的话,当空闲时间和最长时间不相同时,真实的refresh_token_expire时间将取决于client Session Idle的值,如下配置 。
当refresh_token到期之后到达 ( session max的时间 ) ,session就失效了,而它并不会立即清除,它会交给keycloak进行维护,最长是session max时间后自动清除,而用户如果在这个时间之前进行refresh_token时,会提示token是不活动的,这时会话也会也被清空,表示令牌过期了,如下面两张图:
当session idle和session max不相同时(sso session max和client session max),用户的会话会在sso session max到期时删除,而sso session max是全局的,不能在客户端单独配置,一个会话是在什么时间被系统回收,主要由以下6个参数决定,SSO Session Max和Client Sesssion Max我们设置一个即可,它在keycloak后台清理session时会以最长的为准,而当session达到session idle时间时,如果用户主动刷新token,session也会被主动删除,不会等session max时间达了再删.
会话的空闲时间(Idle),是指在多长时间之内没有使用refresh_token进行刷新,这个会话(session_state)就过期,无法再直接用refresh_token去换新的token了,这时用户就需要重新回到登录页,完成新的认证;这主要针对长时间不操作的用户,kc需要让它重新完成用户名密码的确认.
注意:如果开启了“记住我”这个功能,因为如果开启“记住我”功能之后,你的会话空闲时间等于“记住我空闲时间”,你的”sso session idle”配置将失效,如果记住我配置了最大时间和空闲时间,那么token的生成和校验都将使用记住我的时间,如图keycloak14.0.0.-services里AuthenticationManage.isSessionValid的源码.
【session idle在判断上有2分钟的误差,主要考虑DC集群的数据同步,比如idle有效期5分钟,那么真正过期就是5+2为7分钟】当到7分钟后,你获取session是否在线时,结果会返回false. 。
上面代码中,isSessionValid方法会在验证token和刷新token时都会进行执行,我们如果希望将session idle和session max去正确使用,还需要修改kc源代码中的org.keycloak.protocol.oidc .TokenManager.refreshAccessToken()方法中的代码,将verifyRefreshToken方法参数中的checkExpiration改成false,如图:
最后,下图配置了access_token有效期2分钟,refresh_token最长30天,会话空闲为7天;配置的作用为:用户每2分钟access_token会过期,然后用户通过refresh_token去换新的access_token,如果用户7天没有换token,这个会话就过期,如果会话已经产生了30天,则会话也过期,用户就会返回登录页,重新认证.
事实上,当session idle 和session max相等时,你的refresh_token的过期时间会一直递减,从第一次申请这个refresh_token开始,这个过期时间就固定了,它和你换新token是无关系的;但如果session idle和 session max不相等时(max>idle),你每换新token,你的新换的refresh_token的过期时间都从头开始算,它的大小等于session idle的大小,这也是你在session idle时间内没有去刷新token而会话就会过期的原因,请注意:我们要用新换回的refresh_token把之前的refresh_token也替换掉,因为老的已经过期了.
对于用户登录后,如果授权码模式,如果希望refresh_token永不过期,可以使用offline_access这种scope ,前提是你在认证接口调用时,scope地方需要添加offline_access这个选项,并且你是授权码的认证方式,如图:
当前客户端模板里,也是需要添加这个offline_access的客户端模板 。
为指定的用户添加offline_access角色,如果没有这个角色,需要手动添加.
当没有开启Offline session Max limit时,你的刷新token就是永不过期的,如图 。
如果希望控制refresh_token的有效期,可以开启限制 。
生成的refresh_token的超时时间将是5分钟,300秒,还是上面4个配置,谁小用谁,如图:
Refresh_token的JWT串,解析后Typ有两种类型,Refresh和Offline,前者的是通过SSO Session Max来控制它的有效期,而后者Offline就是申请token时,使用的scope包含了offline_access,它对应的refresh_token是无不效期的.
最后此篇关于keycloak~token有效期与session有效期的文章就讲到这里了,如果你想了解更多关于keycloak~token有效期与session有效期的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在开发一个应用程序,它使用 OAuth - 基于 token 的身份验证。 考虑到我们拥有访问和刷新 token ,这就是流程的样子。 Api call -> intercepter append
如何取消标记此代码的输出? 类(class)核心: def __init__(self, user_input): pos = pop(user_input) subject = ""
当我使用命令 kubectl 时与 --token标记并指定 token ,它仍然使用 kubeconfig 中的管理员凭据文件。 这是我做的: NAMESPACE="default" SERVICE
我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本 token 授权的工作
我正在尝试从应用服务获取 Google 的刷新 token ,但无法。 日志说 2016-11-04T00:04:25 PID[500] Verbose Received request: GET h
我正在开发一个项目,只是为了为 java 开发人员测试 eclipse IDE。我是java新手,所以我想知道为什么它不起作用,因为我已经知道该怎么做了。这是代码: public class ecli
我正在尝试使用 JwtSecurityTokenHandler 将 token 字符串转换为 jwt token 。但它出现错误说 IDX12709: CanReadToken() returned
我已阅读文档 Authentication (来自 Facebook 的官方)。我仍然不明白 Facebook 提供的这三种访问 token 之间的区别。网站上给出了一些例子,但我还是不太明白。 每个
我的部署服务器有时有这个问题,这让我抓狂,因为我无法在本地主机中重现,我已经尝试在我的 web.config 中添加机器 key ,但没有成功远。 它只发生在登录页面。 我的布局:
我已经设法获得了一个简单的示例代码,它可以创建一个不记名 token ,还可以通过阅读 stackoverflow 上的其他论坛来通过刷新 token 请求新的不记名 token 。 启动类是这样的
如果我有以前的刷新 token 和使用纯 php 的访问 token ,没有 Google Api 库,是否可以刷新 Google Api token ?我在数据库中存储了许多用户刷新和访问 toke
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
当我有一个有效的刷新 token 时,我正在尝试使用 Keycloak admin REST API 重新创建访问 token 。 我已经通过调用 POST/auth/realms/{realm}/p
我正在尝试让第三方 Java 客户端与我编写的 WCF 服务进行通信。 收到消息时出现如下异常: Cannot find a token authenticator for the 'System.I
在尝试将数据插入到我的 SQl 数据库时,我收到以下错误 System.Data.SqlServerCe.SqlCeException: There was an error parsing the
使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包
我最近注册了 Microsoft Azure 并设置了认知服务帐户。使用 Text Translation API Documentation 中的说明我能够使用 interactive online
我使用 IAntiforgery API 创建了一个 ASP.Net Core 2 应用程序。 这提供了一种返回 cookie 的方法。 客户端获取该 cookie,并在后续 POST 请求中将该值放
我正在使用 spacy 来匹配某些文本(意大利语)中的特定表达式。我的文本可以多种形式出现,我正在尝试学习编写一般规则的最佳方式。我有如下 4 个案例,我想写一个适用于所有案例的通用模式。像这样的东西
我无法理解 oauth 2.0 token 的原则处理。 我的场景是,我有一个基于 web 的前端后端系统,带有 node.js 和 angular 2。用户应该能够在此站点上上传视频。然后创建一些额
我是一名优秀的程序员,十分优秀!