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

如何通过Keycloak API登录系统并获取含更新数据的有效令牌?

解决方案

首先明确:存在符合你需求的请求,分两种场景处理:

场景1:应用自身提供登录API

如果你的系统(应用)有独立的登录接口,直接调用这个接口即可。这类接口通常会在内部完成与Keycloak的交互,同时执行令牌更新/增强逻辑(比如添加自定义业务数据到令牌),最终返回包含新数据的有效access-token。
请求参数一般就是用户名和密码,具体格式需参考你应用的接口文档。

场景2:直接使用Keycloak的登录流程API

你提到的/realms/{realm}/login-actions/authenticate是Keycloak处理表单登录的后端接口,适合模拟浏览器端的用户登录流程,能触发Keycloak内的完整认证逻辑(包括可能的令牌数据更新)。但这个请求属于Keycloak浏览器认证流的一部分,需要先完成前置步骤:

前置步骤

先发送GET请求到Keycloak的授权端点,获取会话相关参数和Cookie:

GET /realms/{realm}/protocol/openid-connect/auth?client_id={your_client_id}&redirect_uri={your_redirect_uri}&response_type=code

从响应中提取以下内容:

  • Cookie中的KEYCLOAK_SESSION和KEYCLOAK_SESSION_LEGACY(后续请求需携带)
  • 响应HTML表单中的session_code、tab_id、credentialId(密码认证对应的凭证ID)

authenticate请求的Payload(form-data格式)

POST请求到/realms/{realm}/login-actions/authenticate,需携带上述Cookie,Payload包含以下必填参数:

  • username: 目标用户的用户名
  • password: 目标用户的密码
  • credentialId: 从前置步骤的表单中提取的凭证ID
  • client_id: 你的应用在Keycloak注册的客户端ID
  • session_code: 从前置步骤提取的会话code
  • tab_id: 从前置步骤提取的会话tab ID
  • authenticationFlow: 认证流ID,默认填browser即可

更适合自动化测试的替代方案

如果你的Keycloak开启了Resource Owner Password Credentials Flow(ROPC流),推荐直接调用token端点获取令牌,流程更简单,无需处理会话Cookie:

POST /realms/{realm}/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded

grant_type=password
&username={your_username}
&password={your_password}
&client_id={your_client_id}
&client_secret={your_client_secret}  # 仅当客户端为保密类型时需要

如果这个令牌缺少应用所需的新数据,说明你的应用在用户登录时会执行额外的令牌增强逻辑(比如更新Keycloak用户属性后刷新令牌),此时你需要在拿到初始token后,调用应用的相关接口完成数据更新,再通过Keycloak的refresh_token端点获取更新后的令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:14:51