Keycloak 23集成Spring项目调用Token API持续返回401 Unauthorized
Keycloak 23 Token端点401错误排查方案
一、Client配置检查
- 确认Client的Access Type:若使用密码授权模式,需设置为
confidential或public;confidential类型需配合Client Secret使用,public类型无需Secret。 - 开启Direct Access Grants Enabled:密码模式依赖此开关,必须设为
On。 - 验证Valid Redirect URIs:密码模式下可临时设为
*(生产环境需调整),避免因URI配置错误导致认证失败。
二、Token请求参数校验
- 核对请求URL:格式必须为
http://<keycloak地址>:<端口>/realms/<你的Realm名称>/protocol/openid-connect/token,注意Realm名称大小写敏感。 - 确保请求参数正确:
grant_type固定为passwordclient_id为test_clientusername和password为已分配admin角色的用户凭据- 若Client为
confidential类型,需添加client_secret参数,值取自Client的Credentials标签页中的Secret
- 请求方式必须为
POST,参数需以x-www-form-urlencoded格式提交,不能用JSON格式。
三、用户与角色配置验证
- 检查用户状态:确保用户的Email Verified设为
On,或在Realm的Realm Settings -> Login中关闭Verify Email开关(默认要求邮箱验证,未验证会导致401)。 - 确认角色分配:admin角色需直接分配给目标用户,或通过用户组间接关联,且角色属于当前操作的Realm。
四、Keycloak日志分析
- 查看日志中的具体错误码:
invalid_client:大概率是Client ID或Secret错误invalid_grant:可能是用户名密码错误、用户未启用、邮箱未验证或授权模式不支持
- 建议将日志级别设为
DEBUG,获取更详细的认证流程信息,精准定位问题。
五、网络与环境排查
- 验证Postman与Keycloak实例的网络连通性,排除防火墙、端口映射问题。
- Docker部署场景下,确认容器端口映射正确,且容器内Keycloak服务正常运行。
内容的提问来源于stack exchange,提问作者Oussema Sahbeni
相关产品推荐
相关产品推荐

