首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用认知凭证注册aws物联网设备

使用认知凭证注册aws物联网设备
EN

Stack Overflow用户
提问于 2017-11-22 11:48:31
回答 2查看 591关注 0票数 2

我正在开发一个应用程序,我需要跟踪一些设备的变化,并显示在前面的设备。

对于用户登录,我使用的是认知,登录后我将获得证书,而且我已经获得了有效的凭证,因为我使用相同的凭据连接了AWS DynamoDB。

现在,我想注册一个具有相同认知证书的aws.iot设备。

我在跟踪https://github.com/aws/aws-iot-device-sdk-js

我向aws用户检查了一些静态凭据,如:

代码语言:javascript
复制
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,但没什么用。

我现在的代码是:

代码语言:javascript
复制
    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
                    });
                }
            }
        });
    });

有人能帮帮我吗,我在这里缺少的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-26 14:42:09

最后,在这种情况下,我得到了解决方案,我所要做的就是在创建设备时传递空字符串作为访问键、密钥和会话令牌,然后在创建设备时传递设备凭据。

代码语言:javascript
复制
    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);
                }
            }
        });
    });
票数 0
EN

Stack Overflow用户

发布于 2017-11-26 04:38:27

对我起作用的是直接从AWS.config.credentials对象传入数据,即

代码语言:javascript
复制
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等是否以小写字母而不是大写开头。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47433960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档