向 AWS API 网关 websocket 连接方法发送参数

Sending parameters to AWS API gateway websocket connect method

我跟随 this tutorial 使用 python、aws apigategay 和无服务器创建了一个小型聊天应用程序。当连接到 Websocket 时,连接 ID 存储在数据库中。

一切都按预期进行,现在我希望能够连接到具有角色的 Websocket,例如聊天允许客户和商店员工。

我正在尝试找到一种将参数发送到连接方法的方法,但到目前为止还没有成功。例如,在建立连接时,我想发送一个角色 ID 并存储在数据库中,以指定连接 ID 属于客户或存储员工。

我了解了 API 网关授权,但问题是聊天将包含在已经 运行 且未使用 AWS 授权的应用程序中。

有什么办法可以做到吗?

在您的连接调用中将值作为 header 发送,并在后端检索它以与 connectionId 一起存储。

wscat --connect wss://aaaaaaaa.execute-api.us-east-2.amazonaws.com/test --header myHeader:myValue

在我的 lambda 中,headers 看起来像,

"headers": {
        "Host": "xxxxxxx.execute-api.us-east-2.amazonaws.com",
        "myHeader": "myValue",
        "Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits",
        "Sec-WebSocket-Key": "xxxxxxx",
        "Sec-WebSocket-Version": "13",
        "X-Amzn-Trace-Id": "xxxxxxx",
        "X-Forwarded-For": "xxxxxx",
        "X-Forwarded-Port": "443",
        "X-Forwarded-Proto": "https"
    },

您可以通过查询字符串发送参数如下:

 $  wscat -c wss://ws.mycustomdomain.com/?test=123

然后您可以从函数处理程序中的 event.queryStringParameters 获取该参数。

def handler(event, context):
    connectionId = event['queryStringParameters']['test']

希望对你有帮助