【问题标题】:AWS Iot authentication error using with Open Id Connectivity使用 Open Id 连接的 AWS IoT 身份验证错误
【发布时间】:2019-09-18 22:36:07
【问题描述】:

来自联合登录的 AWS IOT 连接(在 cognito Identity 中)不成功

  1. 在 cognito 用户池中,我使用 Microsoft 帐户作为 OIDC 设置身份提供者,并使用 Microsoft Office 凭据登录。
  2. 通过交换从 Microsoft 生成的代码,我能够从 cognito 令牌端点获取访问令牌、刷新令牌和 Id 令牌。
  3. 通过与 aws.config.credentials 交换 id 令牌,我成功检索了访问密钥 ID、密钥和会话令牌。
  4. 我正在尝试通过提供访问密钥 ID、密钥和会话令牌来连接 AWS iot 端点。
  5. 与 websocket 的连接不成功,并引发以下错误。

    2019-04-29 14:48:12.006 TRACEID:420de021-715b-d81d-4a5e-daedde37dfd4 PRINCIPALID:AROAIN6B4B4KMSI2U3UEY:CognitoIdentityCredentials [ERROR] EVENT:MQTT Client Connect MESSAGE:连接状态:AUTHORIZATION_ERRORp 失败原因:AUTHORIZATION_ >

注意:使用 cognito 用户连接成功

'''

function connectWSHandler(dispatch){  

var AWS = require('aws-sdk');

var AWSIoTData = require('aws-iot-device-sdk');

var AWSConfiguration = {
poolId: 'us-east-1:*****************************', 
host:"a************-ats.iot.us-east-1.amazonaws.com",
region:  'us-east-1'
};

var wsOptions = {
handshakeTimeout:15000,
rejectUnauthorized:false
}

var clientId =  localStorage.getItem("IdentityId"); 

var accessKeyId = localStorage.getItem("AccessKeyId");
 console.log('accessKeyId',accessKeyId);
 var secretKey = localStorage.getItem("SecretKey");
 var sessionToken = localStorage.getItem("SessionToken");

 if(accessKeyId==null || secretKey==null || sessionToken==null)return;

 mqttClient = AWSIoTData.device({
 host:AWSConfiguration.host,
 clientId: clientId,
 protocol: 'wss',
 websocketOptions:wsOptions,

 maximumReconnectTimeMs: 8000,
 debug: true,

 accessKeyId: accessKeyId,
 secretKey: secretKey,
 sessionToken: sessionToken
  });

与 AWS IOT 的连接应该成功

【问题讨论】:

    标签: node.js amazon-web-services openid-connect aws-iot


    【解决方案1】:

    我通过将 iot 策略附加到我们用于连接的客户端 ID 解决了上述问题。 注意:client id 只是用户的身份 id

     //Need aws-sdk.js to work
          function attachPrincipalPolicy(policyName, clientid) {
              new AWS.Iot().attachPrincipalPolicy({ policyName: policyName, principal: clientid}, function (err, data) {
                if (err) {
                        console.error(err); // an error occurred
                    }
              });
           }
    

    要在 AWS IOT CORE 中创建物联网策略以进行连接和发布

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 2017-03-11
      • 2020-09-03
      • 2021-03-17
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多