内容大纲

  1. refresh_token作用
  2. 使用方法
  3. refresh_token规范
  4. keycloak开启refresh_token的限制
  5. refresh_token时的错误汇总
  6. 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的底层逻辑

  1. validateToken方法

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

  3. isSessionValid方法主要验证会话是否有效,主要判断以下几个部分

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

  1. 从userSession中获取当前用户对象
  2. 判断用户是否有效
    • 如果用户被删除,返回400 Unknown user
    • 如果用户状态为禁用,返回400 User disabled
    • 如果用户需要一个必要的行为,返回400 User has required action
  3. 判断当前refresh_token的建立时间是否早于会话开始时间,正常情况下肯定是晚于会话时间,如果早于,返回400 Refresh toked issued before the user session started
  4. 判断当前userSession是否在当前client_id对应的clientSession里,如果没有,返回400 Session doesn't have required client
  5. 判断当前refresh_token里的azp是否与请求参数client_id相同,不同返回400 Unmatching clients
  6. 验证refresh_token是否被篡改
  7. 检查客户端是否有consent的授权许可同意,如果开启了,会返回400 Client no longer has requested consent from user
  8. 成功建立新的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的标准化的更多相关文章

  1. keycloak~账号密码认证和授权码认证

    用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...

  2. keyclaok~keycloak存到cookie中的值和session_state

    keycloak存到cookie中的值 AUTH_SESSION_ID KEYCLOAK_IDENTITY KEYCLOAK_SESSION AUTH_SESSION_ID 用户的当前session_ ...

  3. Atitit常见的标准化组织与规范数量jcp ecma iso

    Atitit常见的标准化组织与规范数量jcp ecma iso 1. 常见的标准化组织1 1.1. 重要的基金会apache1 1.2. 美国国家标准学会(American NationalStand ...

  4. 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

    一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属 ...

  5. 第二章:UNIX标准化及实现

    本章节介绍个UNIX编程环境的标准化的进展,对ISO C,POSIX和Single UNIX Specification三个主要标准进行了说明 本章后面部分介绍了限制的具体实例. 我学习本章的心得是: ...

  6. Atitit USRqc62204 证书管理器标准化规范

    Atitit USRqc62204 证书管理器标准化规范 /atiplat_cms/src/com/attilax/cert/CertSrv4mv.java /** * */ package com. ...

  7. Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案

    Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案 安装主要解决一个问题,就是resin的内容启动路径以及端口..这里是使用的端口8077 主 ...

  8. Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结

    Atitit 发帖机实现(4 )- usbQBM1601 gui操作标准化规范与解决方案attilax总结 1.1. 根据gui的类型使用不同的gui调用api1 1.2. Script化1 1.3. ...

  9. Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化

    Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...

  10. Atitit usrQBK1600 技术文档的规范标准化解决方案

    Atitit usrQBK1600 技术文档的规范标准化解决方案 1.1. Keyword关键词..展关键词,横向拓展比较,纵向抽象细化拓展知识点1 1.2. 标题必须有高大上词汇,参考文章排行榜,1 ...

随机推荐

  1. bitmap的特性和应用

    BitMap 是什么? BitMap 简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit. 那BitMap数据结构长什么样呢? 一个长度为8的BitMap是下面这样的 ...

  2. 论文解读《The Philosopher’s Stone: Trojaning Plugins of Large Language Models》

    发表时间:2025 期刊会议:Network and Distributed System Security (NDSS) Symposium 论文单位:Shanghai Jiao Tong Univ ...

  3. 技术实践|数据迁移中GBK转UTF8字符集问题分析

    导语:在国产化创新的大背景下,数据库迁移项目逐渐增多,在数据库迁移过程中,源数据库和目标数据库字符集有时会不同,这时如何进行字符集转换则成为了一个重要的问题,同时在转换过程中还需要确保数据的完整性和一 ...

  4. 【微软】微软程序注册(zfile自建API)

    Zfile支持设置自己的回调地址,怎么设置呢? 参考:https://docs.zfile.vip/advanced/onedrive-api/ 上面文档写的很清楚了,我提醒两点 1.进入 https ...

  5. 欧拉OpenEuler安装MySQL8

    1. 安装mysql tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar mv mysql-8.0.21-linux-glibc2.12-x86_64 / ...

  6. [转]spring-framework-x.x.x.RELEASE-dist下载教程

    原文链接: spring-framework-x.x.x.RELEASE-dist下载教程

  7. [转]java中带图片按钮的大小设置

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...

  8. [转]使用navicat将excel文件导入mysql数据库

    excel: 注: 1.mysql里建立一张跟excel一样的表结构的表(包含id) 2.excel最好没有任何格式,只是纯值,不然会出现导入不了的错误 ----------------------- ...

  9. 电信机顶盒(烽火HG680-KA)安装第三方APP

    一.前言 最近我回家休息了几天,正好赶上了暑期电视剧的更新.于是,我就在客厅里舒舒服服地坐下来,准备大饱眼福.然而,当我打开电视机准备观赏时,却发现几乎所有的电视剧都要VIP会员才能观看.于是有了以下 ...

  10. PostGIS代码操作简介

    PostGIS代码操作简介 1. 代码操作POSTGIS的可选方案 jdbc postgis-java geotools gdal 2. JDBC public void testJdbc() { S ...