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

Keycloak 26轻量访问令牌交换失败问题及跨域身份模拟需求

解决Keycloak 26轻量访问令牌交换失败问题

问题原因

轻量访问令牌属于引用令牌(Reference Token),并非自包含的JWT格式。跨域进行令牌交换时,目标域无法直接验证令牌有效性,必须调用令牌发行域(master)的introspect端点完成验证。报错Key not found本质是目标域无法完成这一验证流程,核心原因是相关配置缺失。

解决步骤

1. 配置master域的admin-cli客户端

  • 进入master域的Clients -> admin-cli -> Settings:
    • 开启Service Accounts Enabled
  • 切换到Service Account Roles标签:
    • 选择realm-management客户端,添加view-users、introspect-tokens权限(确保服务账号具备令牌 introspect 和用户信息读取权限)

2. 配置目标域(abc)的信任与客户端设置

  • 进入abc域的Clients -> admin-cli -> Settings:
    • 开启Allow Impersonation(满足身份模拟的核心需求)
    • 将Access Type设置为confidential(令牌交换需要客户端认证,public类型无法满足)
  • 切换到Advanced标签:
    • 在Token Exchange Policy中添加master域为信任发行域:点击Add,输入master域的ID或名称,配置允许令牌交换的规则

3. 修改令牌交换请求

轻量令牌作为引用令牌,需明确指定subject_token_type参数;若客户端为confidential类型,还要加入client_secret完成认证。如果需要身份模拟,额外添加requested_subject参数指定目标域的用户账号:

# 获取master域的轻量访问令牌
access_token_1=$(curl -Ss -X 'POST' "http://localhost:8000/auth/realms/master/protocol/openid-connect/token" -d "client_id=admin-cli&grant_type=password&username=admin&password=qwerty12345&scope=openid" | jq -r .access_token)

# 交换为abc域的目标用户令牌
access_token_2=$(curl -Ss -X 'POST' "http://localhost:8000/auth/realms/abc/protocol/openid-connect/token" \
  -d "client_id=admin-cli" \
  -d "client_secret=YOUR_ABC_ADMIN_CLI_SECRET" \ # 替换为abc域admin-cli的客户端密钥
  -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
  -d "subject_token=$access_token_1" \
  -d "subject_token_type=urn:ietf:params:oauth:token-type:access_token" \
  -d "audience=admin-cli" \
  -d "requested_subject=TARGET_USERNAME") # 替换为abc域的目标用户账号

4. 验证跨域基础条件

  • 确保abc域的Keycloak节点能够正常访问master域的/auth/realms/master/protocol/openid-connect/token/introspect端点
  • 检查master域的Realm Settings -> Tokens:确认Token Introspection Enabled处于开启状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:37:03