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

Spring Boot集成Keycloak谷歌登录后如何通过谷歌令牌获取Keycloak凭证?

核心实现逻辑

你需要用到Keycloak符合RFC 8693标准的**令牌交换(Token Exchange)**能力,直接用谷歌返回的ID令牌交换Keycloak的正式身份令牌即可。

前置配置要求

首先需要确保你已经完成Keycloak侧的基础配置:

  • 目标Keycloak领域中已将谷歌添加为身份提供商,配置的谷歌客户端ID与你获取谷歌令牌时使用的客户端ID完全一致
  • 已开启对应领域的令牌交换功能,且给你的Spring Boot应用关联的Keycloak客户端开放了谷歌身份提供商的令牌交换权限
  • 可根据业务需求提前配置好谷歌身份提供商的用户属性映射规则,交换令牌时Keycloak会自动同步用户邮箱、姓名等信息到本地用户库
调用端点说明

需要调用Keycloak的统一令牌端点,请求方式为POST:

{keycloak服务地址}/realms/{你的领域名称}/protocol/openid-connect/token

请求头指定Content-Type: application/x-www-form-urlencoded,请求参数如下:

参数名参数值说明
grant_type固定值:urn:ietf:params:oauth:grant-type:token-exchange
subject_token填谷歌返回的id_token字段值
subject_issuer填你在Keycloak中配置谷歌身份提供商时设置的别名,比如你设置的别名是google就填这个值
client_id填你的Spring Boot应用在Keycloak中关联的客户端ID
client_secret如果你的Keycloak客户端为保密类型,需要补充该参数填对应客户端的密钥

以下是示例请求:

curl --location --request POST 'http://127.0.0.1:8080/realms/demo/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'subject_token=eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc0MjE3YjhkYWRiYjM2NTc4MzU4MGY5ZTkyNDg3ZDTYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiYXpwIjoiODY5Njc1Nzc0MjgxLTY4ZmExbjY3ZW41NW5zb3YyaGdib2JtZG05c3VlMDB1LmFwcHMuZ29vZ2xldXNlcmNvbnRlbtIiwiYXVkIjoiODY5Njc1Nzc0MjgxLTY4ZmExbjY3ZW41NW5zb3YyaGdib2JtZG05c3VlMDB1LmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwic3ViIjoiMTAxNDE4ODQ2MDM0MzI5Nzk0ODcwIiwiZW1haWwiOiJtYXJpbnNwYWppYzE5OThAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJlbno5VDhuc3NLSHNqaEdVbFZQV253IiwiaWF0IjoxNjMxNTUzNjAyLCJleHAiOjE2MzE1NTcyMDJ9.oU_LAWPQU0RJ5yMM7M-xtKdM1rpLy2xqIg46kHu0KWR_1_2IY_tc3Uf1v2nNoEAQVXnZVbScUaHspwNny8yDirybxgOX_73aPGzb_FmcjVqgLTZTt8dbjizgy412cNFskH3GuRAXRMZppDbPPKlE2sgceMxapboCuivXIRyAyDQ_uXHSINEaPKFE3Tqjx-x6T6epcqY8M4hCt8Obs929BT86e3Ky6Xj1DUBv5UMm1Hk8NxoD_JU-rFLPQx-FZrVV3kYkdbJWKpoUVU-CToXDR4yRmxYXoz2kZMlc-rgugxxJ3OKG-JotVfSDh5Vp5iHy9kUpHOxi_8vWKw28LwNNhA' \
--data-urlencode 'subject_issuer=google' \
--data-urlencode 'client_id=springboot-demo-app' \
--data-urlencode 'client_secret=abc123def456'

请求成功后会直接返回Keycloak生成的access_token、refresh_token、id_token以及过期时间等信息,解析令牌即可拿到用户的完整身份数据。

Spring Boot集成建议
  • 如果项目已经引入keycloak-spring-boot-starter依赖,直接封装上述POST请求逻辑即可,无需额外引入其他组件
  • 发起交换请求前可先对谷歌返回的ID令牌做基础校验,包括签名有效性、过期时间、签发方、受众是否匹配,避免发起无效请求
  • 拿到Keycloak的访问令牌后,即可沿用常规的Keycloak鉴权逻辑做接口权限控制,也可通过Keycloak的用户信息接口获取更多用户属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:27:05