我正在研究使用AWS IOT让我们的硬件与用户手机通信。为此,我们使用react-nate-paho-mqtt库。
我会在守则前简单解释:
>
失败:错误:AMQJS0007E套接字错误:未知套接字错误。
生成的带有sigV4签名的mqttendpoint如下所示:
wss://a2mt3pd9aiue3c.iot.ap-southeast-1.amazonaws.com/mqtt?X-Amz算法=AWS4-HMAC-SHA256
代码片段如下所示:
fetch('https://xxx.execute-api.ap-northeast-1.amazonaws.com/dev/app/connect', { // retrieve app token from ap-northeast-1 cognito
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data": {"coreUserId": 100, "companyId": 1,
"brandId": 2, "hotelId": 3, "roomId": 4}})
})
.then((response) => response.json())
.then((responseJson) => {
console.warn("resnpose json is : ", responseJson)
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: AppConfig.identityPoolId,
IdentityId: responseJson.message.cognitoIdentityId,
Logins: {
'cognito-identity.amazonaws.com': responseJson.message.token
}
});
AWS.config.credentials.get((err) => {
if (err) {
console.error(err)
}
console.warn("AWS.config.credentials --> ", AWS.config.credentials)
var ioturl = this.getSignedUrl(AppConfig.iotEndpoint, AppConfig.region, AWS.config.credentials);
const client = new Client({
uri: ioturl,
clientId: AppConfig.credentials.cognitoIdentityId,
storage: AsyncStorage
});
this.client = client;
client.on('messageReceived', (message) => {
try {
const jsonResponse = JSON.parse(message.payloadString);
console.warn(Date.now()," : received : ", jsonResponse);
} catch (e) {
console.warn("Failed to recieve: ", e)
}
//this.handleIoTMessage(jsonResponse);
});
client.on('connectionLost', (responseObject) => {
console.warn('CLIENT DC');
if (responseObject.errorCode !== 0) {
//clearInterval(this.publishInterval);
console.warn('CONNECTIONLOST TRIGGERED:', responseObject.errorMessage);
}
});
var connectOptions = {
useSSL: true,
timeout: 30000, // In milliseconds, it turns out
keepAliveInterval:30000,
cleanSession:true,
mqttVersion: 4,
};
AWS.config.update({region: "ap-southeast-1"}); //now try to connect to another region..where there is no cognito available
const IoT = new AWS.Iot();
var params = {
policyName: "Test",
principal: AppConfig.credentials.cognitoIdentityId // this cognito identity id is in ap-northeast-1 . NOT in ap-southeast-1 where IOT is located
};
IoT.attachPrincipalPolicy(params, (err) => {
if (err) {
console.error('ERROR attachPrincipalPolicy: ', err);
}
client.connect(connectOptions)
.then((result) => {
console.warn("connect resutl : ", result, " .. not subs ")
return client.subscribe('b/2/p/3/r/4/#', {qos: 1, timeout: 15000})
})
.then(function (xx, yy) {
console.warn("Subscribe succss : ", xx, yy)
const message = new Message(JSON.stringify({"xxx": "yyy"}));
message.destinationName = 'b/2/p/3/r/4/xx';
return client.send(message);
})
.then(function (xx, yy) {
return console.warn("Successfully sent : ", xx, yy)
})
.catch((responseObject) => {
console.warn("response object is : ", responseObject);
if (responseObject.errorCode !== 0) { // fail
console.warn(`CATCH ONCONNECTIONLOSTTRIGGERED: ${responseObject.errorMessage}`);
}
});
});
});
})
.catch((error) => {
console.error(error);
});
它失败于:
Error: AMQJS0007E Socket error: Unknown socket error.
有人能提出需要做什么吗?在没有cognito的地区认证用户的标准是什么?
也许你已经意识到了这一点,但Cognito最近在新加坡推出
我目前正在原型化一个由AWS物联网支持的应用程序,允许用户控制他们的设备。 我的想法是使用AWS Cognito对用户进行身份验证,并通过IAM角色限制对该用户拥有的特定设备(主题)的访问。 我可以看到,您可以将角色分配给一组用户,这将非常好,但允许的组数上限非常低(25)。 我是错过了一个技巧,还是这是对认知的限制?如果是这样,处理这种情况的最佳方法是什么? 提前谢谢。
根据文档,我了解了如何创建物联网,以及如何使用AWS物联网创建经过身份验证的用户。我的问题是如何有效地组合这些服务,以便每个用户都可以安全地访问他或她的多个设备。 假设Jane刚刚注册了该平台,并希望将她的灯泡设备连接到她的帐户。我们还假设她的灯泡设备上已经有证书和物联网中的策略,以便它可以连接到物联网平台,然后发布和订阅一些主题。为了简单起见,假设Jane可以通过简单地进行名为的API调用来创建
使用AWS物联网规则功能,我可以定义一个将MQTT数据映射到DynamoDB的规则。是否可以使用来自不同帐户的第三方DynamoDB资源来实现相同的结果,而不是在同一帐户上使用本地DynamoDB?如果是积极的,如何实现?
通过设置open_mqtt_protocol选项,启用后会解析mqtt包头,worker进程的onReceive事件每次会返回一个完整的mqtt数据包。 程序代码 mqtt_server.php <?php function decodeValue($data) { return 256 * ord($data[0]) + ord($data[1]); } function decode
我想使用Cognito对我的用户进行身份验证,这是一个内置于Flutter和Dart的应用程序。 不幸的是,Dart不存在本机AWS SDK,我不能在颤振中使用JS互操作。 我已经研究了OAuth2流,但这需要将我的用户重定向到登录表单,这对移动应用程序来说不是很好。 有哪些替代方案?
在iOSSDK(v2.4.8)中,我不能注销一个用户,然后以不同的用户正确登录。 AWS为第一个用户(自应用程序启动后)返回的(正确的)cognityIdentityId也为第二个用户返回(除非应用程序重新启动)。这允许另一个用户访问一个用户的AWSCognitoDataset。 我认为这是因为iOS SDK缓存了id,而清除该缓存的记录调用无法完全工作。 登录时: self.credential