mat*_*i.o 15 websocket jwt openid-connect
这可能是基于意见的,但我仍然怀疑是否有最佳实践,因为我对websocket实践几乎一无所知
我有一个从我自己获得JWT令牌的SPA OP.然后它使用该JWT连接到我使用REST和WebSockets的其他服务.
就REST来说,它非常简单:
Authorization: Bearer ...)并提供对受保护资源的访问,或者使用a响应401,让SPA知道它需要请求新令牌.现在有websockets:
在加载SPA期间,一旦我获得了令牌,我就打开了一个WS到我的web服务.我发送的第一条消息是login_message我的JWT,然后我保留在服务器的websocket实例上以了解谁在发送消息.我收到的每个后续消息,我都会验证JWT是否已过期.
据我所知,一旦它到期,我面临两个选择:
删除websocket时会token_expired出现某种错误,并在令牌刷新后强制浏览器建立新的websocket连接.
保持websocket打开,返回错误消息并发送新的登录消息(刷新令牌后)
不要使用登录消息,只需在每个请求中发送JWT.
问题:您会推荐哪种方法?为什么?在安全性和性能方面.我没有列出其他常见做法吗?
mat*_*i.o 14
我问过一个很老的问题,所以我很乐意分享我们选择的做法:
一旦客户得到他的JWT第一次获取他的数据(当应用程序启动时),就会打开一个 WebSocket。
为了验证通道,我们发送一条我们定义为协议一部分的消息,称为authMessage该消息,其中包含以下内容JWT。
服务器将此数据存储在套接字的实例上,并在沿线发送数据或从客户端接收数据之前验证其有效性/到期时间。
令牌在过期前几分钟会在 Web 应用程序中静默刷新,然后再过几分钟authMessage服务器发出另一个令牌(从步骤 2 开始重复)。
如果出于某种原因它在更新之前过期,服务器将关闭该套接字。
这大致就是我们在应用程序中实现的(未经优化)并且对我们来说效果非常好。
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |