You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak未返回refresh_token,如何获取该令牌?

解决Keycloak未返回refresh_token的问题

问题根源

你当前使用的是OIDC Implicit Flow(请求中response_type=id_token+token),按照OIDC规范,这个流程是为纯前端无后端应用设计的,出于安全考虑,默认不会返回refresh_token——浏览器环境无法安全存储敏感的refresh_token,容易遭XSS攻击窃取。

解决方案

方案1:切换到Authorization Code Flow(推荐,安全合规)

这是OIDC生产环境的标准流程,需要后端配合完成:

  • 修改认证请求的response_type参数为code,把原URL中的response_type=id_token+token替换为response_type=code
  • 用户授权后,前端会拿到一个授权码(code),将这个code传给你的后端服务
  • 后端调用Keycloak的Token端点(POST https://URL/auth/realms/XXX/protocol/openid-connect/token),携带以下参数换取完整token:
    client_id=你的客户端ID
    client_secret=你的客户端密钥(仅后端持有,不能暴露给前端)
    grant_type=authorization_code
    code=前端拿到的授权码
    redirect_uri=和认证请求一致的回调地址
    
    此时接口会返回包含refresh_token的完整响应。

方案2:在Implicit Flow中启用refresh_token(不推荐,存在安全风险)

如果因业务限制必须使用Implicit Flow,可按以下步骤操作:

  1. 登录Keycloak控制台,进入对应客户端的配置页面
  2. 在「高级」标签下,找到「Implicit Flow Allow Refresh Token」选项并勾选开启
  3. 修改认证请求的scope参数,添加offline_access,把原URL中的scope=openid改为scope=openid offline_access
  4. 重新发起认证请求,此时响应中会包含refresh_token

注意:此方案会将refresh_token暴露在浏览器的URL片段或本地存储中,存在被XSS攻击窃取的风险,仅建议在低安全要求场景使用。

内容的提问来源于stack exchange,提问作者renesahmkow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:00:28