【问题标题】:MQTT over Websocket request / x-amzn-ErrorType: ForbiddenExceptionMQTT over Websocket 请求 / x-amzn-ErrorType: ForbiddenException
【发布时间】:2016-07-05 15:43:03
【问题描述】:

我正在使用 ESP8266-Websocketaws-sdk-arduino(cleaned branch) 和 pubsubclient 尝试使用 websockets 与 aws iot mqtt 服务进行通信。

我的问题是关于第一个连接请求。我使用这个浏览器应用程序作为参考 https://github.com/awslabs/aws-iot-examples 和来自 aws-sdk-arduino 的签名代码(调用 aws iot restful api 可以正常工作)

我的请求是这样的(在连接到 443 端口的端点之后):

GET wss://ENDPOINT.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
host: ENDPOINT.iot.us-west-2.amazonaws.com
Connection: Upgrade
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: D2alJOyUkBlR+8yhv2UBLg==
Sec-WebSocket-Protocol: mqtt

但我不断得到

HTTP/1.1 403 Forbidden
content-type: application/json
content-length: 241
date: Fri, 18 Mar 2016 18:34:57 GMT
x-amzn-RequestId: f2edfe83-1bbc-4481-97e0-39ccfc4d1c2f
connection: Keep-Alive
x-amzn-ErrorType: ForbiddenException:

我是否缺少一些请求标头参数?有没有办法从 x-amzn-ErrorType: ForbiddenException 获得更好的反馈?我在签名过程中搞砸了吗? (即使它适用于休息呼叫)

【问题讨论】:

    标签: websocket arduino mqtt esp8266 aws-iot


    【解决方案1】:

    是的,我终于得到响应状态 101 切换协议 \o/

    当你构建请求时,它必须是:

    GET /mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
    

    而不是

    GET wss://ENDPOINT.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
    

    我关注的 js 示例使用的是完整路径。当我收到由 chrome(通过开发人员工具)构建的请求时,路径也已满。就在使用 firebug 之后,我得到了浏览器发送到服务器的真实请求(使用短路径)。

    现在我可以继续尝试解决方案(在 esp8266 上通过 websockets 的 mqtt):-) 如果可行,我将分享代码 ;-)

    【讨论】:

    • 谢谢。我看过那个图书馆,但没有建立联系。会试一试的。
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多