Aws Websocket {“ message”:“缺少身份验证令牌”}

时间:2020-05-11 17:38:19

标签: python amazon-web-services websocket api-gateway

任何人都知道这段代码出了什么问题。 api网关的地址返回{“ message”:“ Missing Authentication Token”}。 所有代码均由无服务器框架部署在AWS上。

JS custom.js

var socket;

// Connect to the WebSocket and setup listeners
function setupWebSocket(username, token) {
    socket = new ReconnectingWebSocket(" {api endpoint}?token=" + token);



    socket.onopen = function(event) {
        data = {"action": "getRecentMessages"};
        socket.send(JSON.stringify(data));
    };
        socket.onmessage = function(message) {
        var data = JSON.parse(message.data);
        data["messages"].forEach(function(message) {
            if ($("#message-container").children(0).attr("id") == "empty-message") {
                $("#message-container").empty();
            }
            if (message["username"] === username) {
                $("#message-container").append("<div class='message self-message'><b>(You)</b> " + message["content"]);
            } else {
                $("#message-container").append("<div class='message'><b>(" + message["username"] + ")</b> " + message["content"]);
            }
            $("#message-container").children().last()[0].scrollIntoView();
        });
    };
}
// Sends a message to the websocket using the text in the post bar
function postMessage(token){
    var content = $("#post-bar").val();
    if (content !== "") {
        data = {"action": "sendMessage", "token": token, "content": content};
        socket.send(JSON.stringify(data));
        $("#post-bar").val("");
    }
}

handler.py

def _send_to_connection(connection_id, data, event):
    gatewayapi = boto3.client("apigatewaymanagementapi",
                              endpoint_url="https://" + event["requestContext"]["domainName"] +
                                           "/" + event["requestContext"]["stage"])
    return gatewayapi.post_to_connection(ConnectionId=connection_id,
                                         Data=json.dumps(data).encode('utf-8'))

1 个答案:

答案 0 :(得分:0)

与该消息相反,该问题实际上并非缺少身份验证令牌。当您访问的端点不完全正确时,API网关会返回相同的消息;即不存在,可能是由于某些拼写错误或配置有误。我建议确认您的端点有效,然后重新检查。

收到此消息的原因是,如果他们返回404,则意味着您现在知道调用的(无效)端点不存在。但这还意味着您可以执行蛮力检查所有可能的端点的过程,并且确实存在任何不返回404的事件,但存在某种防火墙,身份验证系统或API密钥之后。通过为所有端点返回403(即使它们不存在),AWS正在改善其安全状况。相同的原因是,在登录表单上您不会返回诸如“用户名不存在”之类的消息,因为否则有人会根据您的错误消息找到一种方法来查找有效的用户名。

希望有帮助