我已经使用WebSocket协议设置了API网关。在“ $ connect”路由请求设置上,我选择了“ AWS_IAM”作为授权方法。用户通过Cognito登录后,Web应用程序需要与此WebSocket API建立连接。然后如何通过Web应用程序上的JavaScript授权WebSocket API请求?使用HTTP API网关,我可以根据访问密钥和会话令牌生成签名,这些签名已传递到请求标头中。但是我无法在WebSocket请求中传递标头。
我从AWS支持人员那里得到了答案。我将需要签署wss URL。因此,签名信息将传递给查询字符串参数中的url,而不是在HTTP请求中设置请求标头。一个已签名的wss URL看起来像:wss://API_ID.execute-api.region.amazonaws.com/dev?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ACCESSKEY/20200131/region/execute-api/aws4_request&X-Amz-Date=20200131T100233Z&X-Amz-Security-Token=SECURITY_TOKEN&X-Amz-SignedHeaders=host&X-Amz-Signature=SIGNATURE
。
要生成签名的URL,我可以使用@ aws-amplify / core库中的Signer.signUrl方法。