如何配置Keycloak以access_type=offline对接Google认证获取刷新令牌?
我之前踩过这个坑!Google在OAuth2离线令牌的处理上确实不走寻常路——它不遵循标准的offline_access scope约定,而是要求认证请求必须带上access_type=offline参数才行。下面是具体的Keycloak配置步骤:
1. 打开Google身份提供者配置
登录Keycloak管理控制台,进入目标Realm,点击左侧菜单的Identity Providers,找到已创建的Google提供者(如果还没创建,先点「Add provider」选择Google)。
2. 添加关键认证参数
在Google提供者的配置页面,滚动到Advanced Settings(高级设置)区域,找到Authentication URL Parameters(认证URL参数):
- 点击「Add parameter」
- 参数名填:
access_type - 参数值填:
offline
这一步是核心,只有带上这个参数,Google才会返回refresh token。
3. 检查基础Scope配置
虽然不需要offline_access,但要确保你请求了必要的基础Scope,比如openid、email、profile。这些可以在Google提供者配置的Scopes字段里设置,默认一般已经包含,但建议确认一下。
4. 额外提示:强制返回Refresh Token
如果用户之前已经授权过你的应用,Google可能不会重复返回refresh token。如果需要每次认证都获取新的refresh token,可以在Authentication URL Parameters里再加一行:
- 参数名:
prompt - 参数值:
consent
配置完成后,重新测试登录流程,应该就能拿到refresh token了。如果还是有问题,可以去Keycloak的日志里排查,确认认证请求是否正确带上了access_type=offline参数。
内容的提问来源于stack exchange,提问作者raisercostin

