如何刷新受 Keycloak 保护的 Websocket 连接令牌

问题描述 投票:0回答:1

我有一个 ActiveMQ Artemis 服务器,我的应用程序通过 WebSockets 上的 STOMP 进行连接。 Artemis 使用 Keycloak 来验证凭据。我将令牌作为

CONNECT
框架的一部分传递。

连接工作正常,但是一旦令牌过期,与打开的 WebSocket 的任何交互(例如订阅、取消订阅等)都会导致客户端断开连接,因为令牌已过期。这是预期的。

如何才能仅在连接时验证令牌?如果连接成功,我不想再让 Artemis 验证令牌。一旦开始接受,连接应该是合法的。

如果那不可能,因为我在 Web 客户端上有更新的令牌,我如何通知 Artemis 以便它在内部更新此令牌?

websocket keycloak stomp activemq-artemis
1个回答
0
投票

文档中所述,当客户端连接并由代理进行身份验证时,身份验证结果将被缓存。对于任何必须授权的操作(例如创建消费者、发送消息等)也是如此。只要代理的缓存包含所需的条目,令牌是否过期都无关紧要。但是,随着缓存条目过期,代理将不得不重新连接到 Keycloak 以再次获得所需的身份验证。如果原始令牌仍然有效,那么一切都会好起来的,但如果令牌已过期,则身份验证将失败。因此,您可以配置缓存来帮助您避免过期令牌的问题。文档中记录了配置详细信息:

缓存的大小由

authentication-cache-size
authorization-cache-size
配置参数控制。两者都默认为
1000
.

缓存条目的有效期由

security-invalidation-interval
控制,以毫秒为单位。使用
0
将禁用缓存。默认为
10000
毫秒。

也就是说,代币过期是有原因的。例如,不推荐无限期地缓存令牌,因为它不安全并且会浪费代理上的资源(即缓存的内存)。

不幸的是,STOMP 协议不支持重新验证。一旦您的令牌过期并且代理的缓存条目失效,您只需重新连接即可。

© www.soinside.com 2019 - 2024. All rights reserved.