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

Keycloak 18.0.2:如何通过API获取登出用id_token_hint及存储安全性

Keycloak 18:获取登出所需id_token_hint及安全性问题

一、能否通过Keycloak API获取id_token_hint?

可以直接通过API获取。id_token_hint的本质就是用户的id_token,以下两种方式可实现:

1. 利用Refresh Token刷新令牌

如果客户端持有有效的refresh_token,调用Keycloak的Token端点:

POST /realms/{你的领域名}/protocol/openid-connect/token

请求参数(表单形式):

  • grant_type=refresh_token
  • refresh_token=你的有效刷新令牌
  • client_id=客户端ID
  • 若为保密客户端,需附加client_secret=客户端密钥

响应结果里会返回新的id_token字段,该值即可作为id_token_hint使用。

2. 调用Token Introspection API

利用有效的access_token或refresh_token,调用Introspect端点:

POST /realms/{你的领域名}/protocol/openid-connect/token/introspect

请求参数(表单形式):

  • token=你的access_token或refresh_token
  • client_id=客户端ID
  • 若为保密客户端,需附加client_secret=客户端密钥

响应中会包含id_token字段(前提是token有效且关联了用户的id_token),直接取该值作为id_token_hint即可。

二、将id_token_hint存储在客户端是否安全?

id_token本身是签名后的JWT,但内容可直接解码,存储安全性完全取决于存储方式:

  • 推荐方式:HttpOnly+Secure Cookie
    这种存储方式下,前端JS无法读取Cookie,能有效防范XSS攻击,同时Secure属性确保Cookie仅通过HTTPS传输,是相对安全的方案,但需配合CSRF防护措施。

  • 不推荐方式:localStorage/sessionStorage或前端内存
    这类存储可被前端JS直接访问,一旦页面遭遇XSS攻击,id_token会被攻击者窃取,进而获取用户身份信息,甚至构造恶意登出请求。

  • 存入客户端自定义JWT声明
    本质和上述存储方式风险一致:如果客户端的JWT存储不安全(比如存在localStorage),id_token同样会面临泄露风险。此外,id_token包含用户敏感身份信息(如用户ID、邮箱),泄露后可能被攻击者滥用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:35:40