keycloak~refresh_token的标准化
内容大纲
- refresh_token作用
- 使用方法
- refresh_token规范
- keycloak开启refresh_token的限制
- refresh_token时的错误汇总
- keycloak中refresh_token的底层逻辑
一 refresh_token作用
refresh_token是用来刷新access_token的,当access_token过期后,可以通过refresh_token来获取新的access_token,而不需要重新登录。
二 使用方法
curl --location --request POST 'https://{keycloak}/auth/realms/{realm}/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token={refresh_token}' \
--data-urlencode 'client_id={client_id}' \
--data-urlencode 'client_secret={client_secret}'
三 refresh_token规范
- 每个refresh_token只能使用一次,不可重复使用,KC这边也会进行回收它
- 通过refresh_token获取新的token时,返回值里会带有
新的refresh_token,我们应该使用新的refresh_token来覆盖上一次的refresh_token - refresh_token有效期取决于keycloaktokenssso session idle的值,即会话空闲时间,如果refresh_token在这个时间内没有使用,那么它会失效
- refresh_token失效后,当前会话session_state也即失效,此时,需要重新登录
注意:
sso session max表示会话最大有效期,在这个时间范围内,用户不需要重新登录,sso session idle表示空间时间,在这个时间内用户不进行操作,也示为退出,用户需要重新登录,这两个值必须大于0;单位为分,小时,天,不支持永久有效期。
四 keycloak开启refresh_token的限制

五 refresh_token时的错误汇总
当refresh_token超过限制时,会返回
invalid_grant错误,此时,需要重新登录

再次使用refresh_token,同样返回状态码400,但返回消息体会有变化

如果当前session已经失效,即会话达到了session max的时间,将返回下面错误

如果当前客户端与token客户端不一致,将返回下面错误

如果当前当前端开启了同意许可,将返回下面错误

六 keycloak中refresh_token的底层逻辑
validateToken方法

通过session_state获取userSession对象,如果userSession对象为空,说明refresh_token已经失效,返回
400Session not active

isSessionValid方法主要验证会话是否有效,主要判断以下几个部分
- 用户会话是否存在,user-session是否存在
- 获取session空闲时间和最大时间,它们的逻辑与是否开启
记住我有关 - 会有两层时间的比较,来确定session是否有效
- 第一层,session空闲时间是否大于(当前时间-最后刷新token时间-容错窗口期(120秒))
- 第二层,session最大时间是否大于(当前时间-session开始时间)
- 上面两层同时满足,说明session是有效的

- 从userSession中获取当前用户对象
- 判断用户是否有效
- 如果用户被删除,返回
400Unknown user - 如果用户状态为禁用,返回
400User disabled - 如果用户需要一个
必要的行为,返回400User has required action
- 如果用户被删除,返回
- 判断当前refresh_token的建立时间是否早于会话开始时间,正常情况下肯定是晚于会话时间,如果早于,返回
400Refresh toked issued before the user session started - 判断当前userSession是否在当前client_id对应的clientSession里,如果没有,返回
400Session doesn't have required client - 判断当前refresh_token里的azp是否与请求参数
client_id相同,不同返回400Unmatching clients - 验证refresh_token是否被篡改
- 检查客户端是否有consent的授权许可同意,如果开启了,会返回
400Client no longer has requested consent from user - 成功建立新的token对象,整个刷新token流程结束
{
"access_token": "",
"expires_in": 120,
"refresh_expires_in": 300,
"refresh_token": "",
"token_type": "Bearer",
"id_token": "",
"not-before-policy": 1740449130,
"session_state": "424b8022-600d-421e-a45d-e0315d1a524d",
"scope": "openid roles email profile"
}
keycloak~refresh_token的标准化的更多相关文章
- keycloak~账号密码认证和授权码认证
用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...
- keyclaok~keycloak存到cookie中的值和session_state
keycloak存到cookie中的值 AUTH_SESSION_ID KEYCLOAK_IDENTITY KEYCLOAK_SESSION AUTH_SESSION_ID 用户的当前session_ ...
- Atitit常见的标准化组织与规范数量jcp ecma iso
Atitit常见的标准化组织与规范数量jcp ecma iso 1. 常见的标准化组织1 1.1. 重要的基金会apache1 1.2. 美国国家标准学会(American NationalStand ...
- 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std 计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属 ...
- 第二章:UNIX标准化及实现
本章节介绍个UNIX编程环境的标准化的进展,对ISO C,POSIX和Single UNIX Specification三个主要标准进行了说明 本章后面部分介绍了限制的具体实例. 我学习本章的心得是: ...
- Atitit USRqc62204 证书管理器标准化规范
Atitit USRqc62204 证书管理器标准化规范 /atiplat_cms/src/com/attilax/cert/CertSrv4mv.java /** * */ package com. ...
- Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案
Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案 安装主要解决一个问题,就是resin的内容启动路径以及端口..这里是使用的端口8077 主 ...
- Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结
Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结 1.1. 根据gui的类型使用不同的gui调用api1 1.2. Script化1 1.3. ...
- Atitit 发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化
Atitit 发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...
- Atitit usrQBK1600 技术文档的规范标准化解决方案
Atitit usrQBK1600 技术文档的规范标准化解决方案 1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 ...
随机推荐
- openEuler欧拉部署Harbor
一.系统优化 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 二.安装Harbor wget https://github.co ...
- 使用pjsip封装自定义软电话sdk
环境: window10_x64 & vs2022pjsip版本: 2.14.1python版本: 3.9.13 近期有关于windows环境下软电话sdk开发的需求,需要开发动态库给上层应用 ...
- 恭喜您获得【智能工具箱】,使用后图片大小-80%、视频大小-90%、PPT附带在线预览属性…
小梁是一名小学英语老师,因为疫情影响,全市中小学都要求师生居家进行线上教学.学习.因为线上教学的各种局限性,为保证教学质量,学校要求老师们提前录制好课程,在上课时播放录制课程,老师自己需要在一旁进行线 ...
- Qt安卓开发经验011-020
安卓中一个界面窗体对应一个Activity,多个界面就有多个Activity,而在Qt安卓程序中,Qt这边只有一个Activity那就是QtActivity(包名全路径 org.qtproject.q ...
- Qt编写的项目作品9-音频综合应用示例
一.功能特点 自动计算音频振幅,绘制音频振幅曲线和音频数据曲线. 支持音频录制,可选音频输入设备.采样频率.通道等参数,Qt5默认保存wav格式,Qt6默认保存mp3格式,Qt6可选wma.aac等格 ...
- EPPlus使用方法---Excel处理我觉得超级好用
目前只是用到导出Excel功能,导出大规模数据量速度也很快,而且比较容易操作(最起码导出是,暂时没有用到处理已存在的excel功能,有人说NPOI也好用,试了一下,最起码导出这个不如EPPlus ...
- 手写 PromiseA+ 实现,轻松通过 872 条用例
手写 Promise/A+ 实现,轻松通过 872 条用例 规范参考:Promise/A+ 规范 - 中文版本 测试工具:https://github.com/promises-aplus/promi ...
- 《Hough变换及其在信息处理中的应用》电子书下载
<Hough变换及其在信息处理中的应用>电子书下载:百度云盘, 提取码:9zyi
- 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出“Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V”错误的解决办法
1 问题 编译WorldWindJavav2.1.0中的ApplicationTemplate.java文件时有时报出如下错误: Exception in thread "main" ...
- kubernetes系列(八) - 控制器的资源清单定义
1. ReplicaSet 1.1 ReplicaSet资源清单 1.2 selector 2. Deployment 2.1 Deployment资源清单 2.2 其他相关操作 2.2.1 应用ya ...