Cha*_*nka 5 node.js reactjs keycloak keycloak-nodejs-connect keycloak-rest-api
我正在使用 Keycloak 来保护我的 React 前端和 node.js 后端。这些客户端使用基于角色的授权进行保护。
我的前端应用程序在 Keycloak 中注册为公共客户端,后端注册为仅承载客户端。当用户登录到前端时,我正在获取该特定用户的访问令牌,并且我正在使用该访问令牌来调用后端 api 层。
当用户从前端注销时,我正在使用 keycloak 对象注销方法从 Keycloak 清除该特定用户的前端客户端会话。这工作正常,用户正在注销并重定向到 Keycloak 登录页面。
但问题是我仍然可以使用该注销用户的访问令牌来调用后端 api。即使用户注销,访问令牌仍然有效。
我尝试了这个端点来撤销用户访问令牌。但没有工作 /auth/admin/realms//users/
有没有办法在 Keycloak 中撤销特定用户的访问令牌?
我认为您只能撤销会话但不能颁发访问令牌。所以解决这个问题的唯一办法就是选择一个极短的访问令牌生命周期并结合静默刷新,这样可用性还是不错的,会话撤销后的最大访问时间等于或小于令牌生命周期。
编辑:有一个关于如何处理受损令牌的官方指南。他们没有提到如何撤销单个访问令牌,因此没有记录的方法可以这样做。但是,您可以通过描述的“not_before”方式撤销所有已发布的访问密钥。
至少在 KC 17.0 via 上是可能的/protocol/openid-connect/revoke,但由于它是身份验证端点,因此您必须提供 和token,client_id因为服务器必须验证令牌是否属于正在调用的特定客户端。
这意味着client_id您可能还需要向服务器发送一个client_secret或任何其他接受的对客户端应用程序进行身份验证的信息 - 就像之前在获取令牌时所做的那样/protocol/openid-connect/token。
另外值得注意的是,token必须作为该名称的 POST 表单参数或 GET 查询参数传递token,而不是作为不记名标头/等传递。
顺便提一句。刷新令牌可以以与访问令牌/openid-connect/revoke相同的方式使用相同的端点撤销,而较旧的、更容易找到的仍然只处理 id 令牌和刷新令牌(POST a等,也可以是or被杀死)并且仍然拒绝任何尝试使用访问令牌。至少在 KC 17.0 上/openid-connect/logoutclient_idclient_secretrefresh_tokenid_token_hint
顺便提一句。我不知道 /revoke 是否可以处理 id 令牌。我对此表示怀疑,但 RFC 似乎允许将其作为自定义扩展。我没有尝试过 KeyCloak 17.0
| 归档时间: |
|
| 查看次数: |
6725 次 |
| 最近记录: |