我正在开发一个应用程序,我需要跟踪一些设备的变化,并显示在前面的设备。
对于用户登录,我使用的是认知,登录后我将获得证书,而且我已经获得了有效的凭证,因为我使用相同的凭据连接了AWS DynamoDB。
现在,我想注册一个具有相同认知证书的aws.iot设备。
我在跟踪https://github.com/aws/aws-iot-device-sdk-js
我向aws用户检查了一些静态凭据,如:
client.device = awsIot.device({
clientId: clientID,
host: host,
accessKeyId: AccessKeyId,
secretKey: secretKey,
protocol: 'wss'
});这个很好用。
然后,我也尝试了使用aws认知assessKeyId和secretKey,但这一次我得到了403。
我查了connect to AWS IoT using web socket with Cognito authenticated users,但没什么用。
我现在的代码是:
var awsIot = require('aws-iot-device-sdk');
AWS.config.credentials.get(() => {
const IoT = new AWS.Iot();
IoT.attachPrincipalPolicy({
policyName: 'PubSub',
principal: AWS.config.credentials.identityId
}, (err, res) => {
if (err) {
} else {
let credential;
if (AWS.config.credentials && AWS.config.credentials.data && AWS.config.credentials.data.Credentials) {
let credentials = AWS.config.credentials.data.Credentials;
awsIot.device({
clientId: clientID,
host: host,
accessKeyId: credentials.AccessKeyId,
secretKey: credentials.secretKey,
protocol: 'wss',
sessionToken: credentials.SessionToken
});
}
}
});
});有人能帮帮我吗,我在这里缺少的东西。
发布于 2017-11-26 14:42:09
最后,在这种情况下,我得到了解决方案,我所要做的就是在创建设备时传递空字符串作为访问键、密钥和会话令牌,然后在创建设备时传递设备凭据。
AWS.config.credentials.get(() => {
const IoT = new AWS.Iot();
IoT.attachPrincipalPolicy({
policyName: 'PubSub',
principal: AWS.config.credentials.identityId
}, (err, res) => {
if (err) {
} else {
let credential;
if (AWS.config.credentials && AWS.config.credentials.data && AWS.config.credentials.data.Credentials) {
let credentials = AWS.config.credentials.data.Credentials;
var device = awsIot.device({
clientId: clientID,
host: host,
accessKeyId: '',
secretKey: '',
protocol: 'wss',
sessionToken: ''
});
device.updateWebSocketCredentials(credentials.AccessKeyId, credentials.SecretKey, credentials.SessionToken, credentials.Expiration);
}
}
});
});发布于 2017-11-26 04:38:27
对我起作用的是直接从AWS.config.credentials对象传入数据,即
if (AWS.config.credentials) {
awsIot.device({
clientId: clientID,
host: host,
accessKeyId: AWS.config.credentials.accessKeyId,
secretKey: AWS.config.credentials.secretAccessKey,
protocol: 'wss',
sessionToken: AWS.config.credentials.sessionToken
});
}如果您是通过此方法调用,也可以检查accessKeyId等是否以小写字母而不是大写开头。
https://stackoverflow.com/questions/47433960
复制相似问题