首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django websockets auth

Django websockets auth
EN

Stack Overflow用户
提问于 2019-01-02 09:49:31
回答 2查看 171关注 0票数 1

我在websockets和Django rest框架的主应用程序中使用了龙卷风+ sockjs。此外,我在Django应用程序上使用rest-framework作为auth。现在我必须确定龙卷风中的使用者。我如何看待它:

  1. 当套接字连接到龙卷风服务器时,用户在消息中发送jwt。
  2. 龙卷风服务器解析jwt并确定jwt是否有效?但是对于这个解决方案,我必须读取数据库。但是这个操作是同步的,这是不好的,因为龙卷风是异步的。

我还以为用芹菜呢。当用户连接到龙卷风时,龙卷风会为芹菜创造任务,在这个任务中,jwt将被解析。在这种情况下,解决方案不是阻挡龙卷风。但是如何通过websockets注意到用户如何检查jwt呢?

EN

回答 2

Stack Overflow用户

发布于 2019-01-03 12:01:13

更新

您不应该需要读取数据库来验证JWT。JWT是一个签名的令牌,您所需要的只是验证JWT的秘密密钥。

旧答案:

(注:图对于JWT来说是相当多余的,因为JWT已经是一个签名的令牌,并且可以在不需要保存的情况下进行验证。然而,此图表适用于基于cookie的auth。)

您可以使用message (如Redis)在Django和旋风之间共享auth令牌:

Redis是快速和轻量级的,您可以通过“旋风”异步连接它。

这里不需要芹菜。

票数 2
EN

Stack Overflow用户

发布于 2019-01-03 02:38:10

如果要使用SQLAlchemy连接和处理数据库,则可以使用对数据库进行异步查询,并通过WebSocket通知用户,而不需要龙卷风的中断事件循环。

代码语言:javascript
复制
@coroutine
def open(self):
   with self.make_session() as session:
       jtw = request.params.get('authorization')
       jwt_valid = yield self.check_jwt_valid(jwt, session)
       if not jwt_valid:
          self.write('JWT Inválid')
          self.close()      

@coroutine 
def check_jwt_valid(self, jwt, session):
   jwt_found = session.query(JWT_QUERY...).first()
   return jwt_found
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54004187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档