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

如何调用Keycloak API实现自定义SSO单点登录流程?

Keycloak 纯API对接登录实现方案

Keycloak默认SSR登录页携带的session_code、execution、tab_id等参数,是浏览器跳转交互流程里绑定临时会话的参数,纯API对接不需要走这套SSR页面逻辑,直接按标准OIDC协议调用对应接口即可,三个接口的使用方式如下:

  • /auth/realms/{realm}/login-action/authenticate:这个是SSR登录页的内部表单提交接口,仅适配浏览器页面交互流程,纯API场景完全不需要调用。要调这个接口就得先模拟浏览器完整访问登录页拿全临时参数,属于冗余操作,没有必要。
  • /auth/realms/{realm}/protocol/openid-connect/certs:这个是OIDC标准的公钥查询接口,作用是返回Keycloak给各类Token签名用的公钥,用来校验你拿到的Token是否合法、有没有被篡改。调用方式很简单,直接发GET请求即可,不需要携带任何参数:
GET :8180/auth/realms/{realm}/protocol/openid-connect/certs

返回结果是JWK格式的公钥集合,校验Token时根据Token头部的kid字段匹配对应公钥做验签即可。

  • /auth/realms/{realm}/protocol/openid-connect/token:这个是核心的令牌颁发接口,纯API登录的核心逻辑就是调用这个接口,不需要任何SSR生成的临时参数,根据业务场景选择对应授权模式,用application/x-www-form-urlencoded格式POST传参即可,两种最常用场景的调用示例:
    1. 后端服务对接(无用户参与的服务间调用):使用客户端凭证模式
    POST :8180/auth/realms/{realm}/protocol/openid-connect/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=你在Keycloak后台配置的客户端ID
    &client_secret=对应客户端的密钥
    
    1. 自研登录页用户账号密码登录:使用密码模式
    POST :8180/auth/realms/{realm}/protocol/openid-connect/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password
    &client_id=你在Keycloak后台配置的客户端ID
    &client_secret=对应客户端的密钥(公共客户端可省略该参数)
    &username=登录用户账号
    &password=登录用户密码
    

注意:如果客户端开启了多因子认证(比如OTP动态码、短信验证),密码模式需要额外携带对应校验参数,复杂验证场景建议改用授权码流或者设备授权流适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:39:50