7

我正在使用 Keycloak 来保护我的 react 前端和 node.js 后端。这些客户端使用基于角色的授权进行保护。

我的前端应用程序在 Keycloak 中注册为公共客户端,后端注册为仅承载客户端。当用户登录到前端时,我正在获取该特定用户的访问令牌,并且我正在使用该访问令牌来调用后端 api 层。

当用户从前端注销时,我正在使用 keycloak 对象注销方法从 Keycloak 清除该特定用户的前端客户端会话。这工作正常,用户正在注销并重定向到 Keycloak 登录页面。

但问题是我仍然可以使用该注销用户的访问令牌来调用后端 api。即使用户注销,访问令牌仍然有效。

我试过这个端点来撤销用户访问令牌。但没有工作/auth/admin/realms//users/

有没有办法撤销 Keycloak 中特定用户的访问令牌?

4

2 回答 2

7

我认为您只能撤销会话但不能发布访问令牌。所以唯一的解决办法就是选择很短的访问令牌生命周期结合静默刷新,这样可用性还是不错的,会话撤销后的最大访问时间等于或小于令牌生命周期。

编辑:有一个关于如何处理受损令牌的官方指南。他们没有提到如何撤销个人访问令牌,因此没有记录的方法可以这样做。但是,您可以通过所描述的“not_before”方式撤销所有已发布的访问密钥。

于 2020-06-11T20:17:52.120 回答
1

您可以使用帖子调用以下端点来撤销访问令牌

{serverName}/auth/realms/{realmName}/protocol/openid-connect/revoke

于 2021-06-24T10:45:59.943 回答