使用 cognito 凭据注册 aws iot 设备
Register aws iot device using cognito credentials
我正在开发一个应用程序,我需要在其中跟踪某些设备的变化并在前端显示这些变化。
对于用户登录,我使用的是 cognito,我在登录后获得了凭据,我已经获得了有效的凭据,因为我使用相同的凭据连接了 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 cognito assessKeyId 和 secretKey 进行了相同的尝试,但这次我得到了 403。
我检查了 ,但没有帮助。
我当前的代码是这样的:
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
});
}
}
});
});
任何人都可以帮助我,我在这里缺少什么。
对我有用的是直接从 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 等是否以小写字母开头而不是大写字母。
在这种情况下,我终于得到了解决方案,我需要做的就是在创建设备时将空字符串作为访问密钥、密钥和会话令牌传递,然后在创建设备时传递设备凭据。
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);
}
}
});
});
我正在开发一个应用程序,我需要在其中跟踪某些设备的变化并在前端显示这些变化。
对于用户登录,我使用的是 cognito,我在登录后获得了凭据,我已经获得了有效的凭据,因为我使用相同的凭据连接了 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 cognito assessKeyId 和 secretKey 进行了相同的尝试,但这次我得到了 403。
我检查了
我当前的代码是这样的:
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
});
}
}
});
});
任何人都可以帮助我,我在这里缺少什么。
对我有用的是直接从 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 等是否以小写字母开头而不是大写字母。
在这种情况下,我终于得到了解决方案,我需要做的就是在创建设备时将空字符串作为访问密钥、密钥和会话令牌传递,然后在创建设备时传递设备凭据。
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);
}
}
});
});