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

调用Keycloak请求Microsoft访问令牌报400及Invalid token错误

错误场景

使用Keycloak颁发的access token调用Broker接口换取微软侧访问令牌,用于请求Microsoft Graph API获取用户头像时,接口返回400 Bad Request,响应体如下:

{
    "errorMessage": "Invalid token."
}

调用配置如下:

  • 请求地址:http://localhost:8080/auth/realms/{Realm name}/broker/{identity provider}/token
  • 请求头:Authorization: Bearer {accessToken}
产生原因
  • 传入Authorization头的令牌本身无效:常见情况包括令牌已过期、令牌是客户端凭据模式生成的应用级令牌而非用户登录后签发的用户令牌、令牌由其他Realm/其他身份提供商签发、令牌被篡改。
  • 路径参数配置错误:请求路径中{identity provider}的取值和Keycloak中实际配置的微软身份提供商别名不匹配(拼写错误、大小写不一致、多输/漏输字符),Keycloak无法定位到对应IDP配置时会统一返回该错误。
  • 权限配置缺失:当前令牌对应的主体(用户或服务账号)没有调用Broker令牌接口的权限,Keycloak权限校验拦截后抛出无效令牌错误。
  • 前置绑定缺失:当前令牌对应的Keycloak用户,从未通过指定的微软身份提供商完成过登录绑定,Keycloak侧没有存储该用户关联的微软侧令牌,无法完成令牌换取。
  • 令牌受众不匹配:传入的Keycloak令牌的aud声明中没有包含broker受众值,接口校验受众规则不通过。
解决方案
  • 先校验传入令牌的合法性:将你放在请求头里的access token做JWT解析,确认核心字段符合要求:
    • iss字段值必须和你当前请求的Realm地址完全一致,格式为http://localhost:8080/auth/realms/{你的Realm名称}
    • exp字段对应的时间戳晚于当前请求时间
    • sub字段对应当前要查询头像的用户ID,typ字段为Bearer
  • 核对身份提供商别名:登录Keycloak管理控制台,进入目标Realm,打开「身份提供商」菜单,找到配置好的微软Azure AD提供商,直接复制列表中显示的别名值,完全原样替换请求路径中的{identity provider}占位符,不要自行修改大小写或增减字符。
  • 配置接口调用权限:如果是用户令牌调用,确认对应用户所属的角色,已经映射了realm-management客户端下的view-identity-provider和broker相关权限;如果是服务账号调用,进入对应客户端的「服务账号角色」 tab,添加上述两个角色后重新生成令牌再发起请求。
  • 确认用户身份绑定状态:用当前用户账号登录Keycloak账户控制台,查看「身份提供商链接」板块,确认已经绑定了对应的微软账号;如果没有绑定,需要先引导用户完成一次微软IDP登录授权,Keycloak才会存储对应的微软侧令牌。
  • 可选简化方案:在微软身份提供商的配置页开启「存储令牌」选项,用户通过微软登录后,Keycloak会自动将微软返回的access token、refresh token存到用户属性中,你可以直接通过Keycloak的用户查询接口读取microsoft-access-token属性值调用Graph API,无需额外调用Broker换令牌接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:18:33