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

Keycloak调用/userinfo接口返回401(USER_INFO_REQUEST_ERROR)求助

问题描述

本地通过以下Docker命令部署Keycloak 20.0.1:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:20.0.1 start-dev
已成功获取Bearer Token,Payload显示Token有效,但调用接口http://127.0.0.1:8080/realms/dialog-feat/protocol/openid-connect/userinfo时返回401状态码,错误日志如下:
type=USER_INFO_REQUEST_ERROR, realmId=(...), clientId=null, userId=null, ipAddress=(...), error=access_denied, auth_method=validate_access_token

解决方法
  • 用Access Token而非ID Token发起请求
    UserInfo接口只接受Access Token,ID Token仅用于身份验证,无访问该接口的权限。区分两者:Access Token的Payload包含scope、client_id字段;ID Token则包含email、name等用户信息以及nonce、at_hash字段。

  • 确保获取Token时请求了正确的Scope
    获取Token的请求必须携带scope=openid(必填),如需更多用户信息可追加profile、email等参数。缺少openid scope会导致Keycloak拒绝UserInfo请求。

  • 检查客户端配置

    1. 登录Keycloak后台,进入dialog-feat realm,找到对应客户端。
    2. 确认Access Type配置:若为Public客户端,必须填写有效的Valid Redirect URIs(本地测试可填http://localhost/*,不能留空);若为Confidential客户端,需确保客户端密钥配置正确,且获取Token时使用了对应的认证方式。
    3. 切换到Client Scopes标签,确认openid、profile等必要范围已添加,且处于Assigned Default Scopes列表中。
  • 验证请求头格式
    调用接口时,Authorization请求头必须严格遵循格式:Bearer <你的Token>,注意Bearer与Token之间有且仅有一个空格,无多余符号或空格。

  • 确认Token有效性
    即使Payload显示有效,仍需检查:

    • exp字段是否晚于当前时间,确保Token未过期;
    • 通过Keycloak的JWKS端点http://127.0.0.1:8080/realms/dialog-feat/protocol/openid-connect/certs验证Token签名是否正确。

内容的提问来源于stack exchange,提问作者Альберт Александров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:40:21