无需重新登录,如何更新Keycloak的ID Token?
Keycloak无需重新登录更新ID Token的方法
利用Refresh Token获取新ID Token
在授权码流登录后,客户端会持有refresh_token。调用Keycloak的token接口:POST /realms/{你的领域名}/protocol/openid-connect/token Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token={你的refresh_token}&client_id={客户端ID}&client_secret={客户端密钥(保密客户端需要)}接口返回的响应里会包含新的id_token,其中已经同步了最新的手机号。需要注意refresh_token有有效期,且默认使用后旧token会失效,可在客户端配置里调整刷新策略。
调用用户信息接口获取最新数据(无需更新ID Token)
如果只是需要获取最新的用户手机号,不一定非要替换Cookie里的ID Token。用当前有效的access_token调用用户信息接口:GET /realms/{你的领域名}/protocol/openid-connect/userinfo Authorization: Bearer {你的access_token}返回的结果是Keycloak数据库中实时的用户数据,直接取手机号即可,适合前端实时展示最新信息的场景。
自定义Keycloak扩展强制刷新会话(进阶)
开发Keycloak事件监听器,监听用户属性更新的事件,触发用户会话的ID Token刷新;或者自定义一个REST端点,调用Keycloak内部API强制更新指定用户会话的ID Token。这种方式需要管理员权限开发和部署扩展,适合有定制化需求的场景。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

