小编Дми*_*лов的帖子

通过 Chalice 框架响应连接到 WebSocket 的客户端

我目前正在使用 Chalice 框架开发 WebSocket 微服务,并在连接事件上的用户身份验证方面遇到突然的障碍。更具体地说:我不明白如何清楚地回应客户,以防他无法通过身份验证。

到目前为止,我使用以下方法:客户端建立与 WebSocket 的连接,然后发送包含身份验证令牌的消息。我真正讨厌这种方法的是客户端可以在没有任何身份验证的情况下连接到 WebSocket - 他可能只是忽略发送身份验证消息,从而只要他愿意就可以保持与 WebSocket 的连接。

幸运的是,允许在连接上发送自定义标头,并且这些标头可以在微服务中轻松处理。问题是如何在 on_ws_connect()事件中用有意义的消息响应客户端,或者至少返回自定义状态代码 - 这里的主要目标是用明确的消息通知客户端,以防他无法通过身份验证并且他的连接将被删除。尝试从内部发送消息on_ws_connect()

@app.on_ws_connect()
def ws_connect(event):
    app.log.debug(f"New connection established: {event.connection_id}")
    event_dict = event.to_dict()
    headers = event_dict['headers']
    token = headers['Authorization'].split(" ")[1]
    try:
        auth(token)
    except PyJWTError as e:
        app.websocket_api.send(event.connection_id, str(e))
        app.websocket_api.close(event.connection_id)
Run Code Online (Sandbox Code Playgroud)

失败并显示:

[ERROR] WebsocketDisconnectedError: DFh2Ffc4oAMCIzw=
Traceback (most recent call last):
  File "/var/task/chalice/app.py", line 1583, in __call__
    super(WebsocketEventSourceHandler, self).__call__(event, context)
  File "/var/task/chalice/app.py", line 1564, in __call__
    return self.handler(event_obj)
  File "/var/task/app.py", line 14, in ws_connect
    app.websocket_api.send(event.connection_id, "User …
Run Code Online (Sandbox Code Playgroud)

python websocket aws-lambda chalice

5
推荐指数
0
解决办法
295
查看次数

标签 统计

aws-lambda ×1

chalice ×1

python ×1

websocket ×1