Keycloak中是否存在可获取用户完整信息的登录REST API?
Keycloak 登录后获取用户完整信息解决方案
你当前使用的{{root}}/realms/{{realm}}/protocol/openid-connect/token就是Keycloak官方提供的面向已创建用户的标准登录REST API,支持密码模式、授权码模式、客户端凭证模式等多种OAuth2授权方式完成用户身份校验,它设计上仅返回令牌凭证,获取用户完整信息可通过以下三种方式实现:
方案1:调用OIDC标准UserInfo接口
拿到token接口返回的access_token后,额外发起一次请求调用用户信息接口:
请求地址:{{root}}/realms/{{realm}}/protocol/openid-connect/userinfo 请求头:Authorization: Bearer <你获取到的access_token>
该接口会返回OIDC标准用户字段,包括用户名、邮箱、手机号,你可以提前在Keycloak对应客户端的「客户端作用域-映射器(mapper)」中配置规则,将自定义用户属性、角色等信息加入返回结果。
方案2:直接解析ID Token
调用token接口的返回值中除了access_token,还包含id_token,它是JWT格式的身份凭证,你可以直接解码JWT的Payload部分获取内置的用户信息。
该方案不需要额外发起HTTP请求,性能开销更低,同样需要提前在客户端映射器中配置需要加入id_token的字段,且使用前需要校验JWT签名合法性,避免数据伪造。
方案3:调用Admin REST API获取全量用户数据
如果需要获取管理员视角的全量用户信息(包括用户所有属性、关联角色、关联用户组、状态等),可以调用Keycloak管理接口:
请求地址:{{root}}/admin/realms/{{realm}}/users/<用户ID> 请求头:Authorization: Bearer <具备view-users权限的服务账号access_token>
注意该接口权限级别较高,普通用户的access_token默认没有访问权限,需要使用具备用户查看权限的服务账号凭证调用。
注意事项
- 所有需要返回的非默认用户字段,都需要提前在对应客户端的映射器中配置,否则不会出现在返回结果中
- 公开客户端调用userinfo接口不需要额外配置,机密客户端需要保证客户端凭证配置正确
- 涉及JWT解析的场景必须校验签名、过期时间等参数,避免安全风险
内容的提问来源于stack exchange,提问作者Dhaval
相关产品推荐
相关产品推荐

