在 React 的 mqtt connect 客户端选项中使用 transformWsUrl() 的 Amplify Signer.signUrl() 时如何更新会话令牌?

How to update session token when using Amplify Signer.signUrl() for transformWsUrl() in mqtt connect client options in React?

提问人:sshakya 提问时间:11/18/2023 更新时间:11/18/2023 访问量:7

问:

我有一个使用 Cognito 进行联合身份验证的 IoT React 应用程序,并使用 AWS IoT Core 作为 IoT 代理。我在项目中使用 Amplify 和 mqtt 库。

我需要创建一个签名的 url 来连接到代理。

我是这样做的:

import { MqttClient, connect } from 'mqtt'
import { API, Auth, Signer } from 'aws-amplify'
...
const {accessKeyId, secretAccessKey,sessionToken} = await Auth.currentCredentials()
const signedUrl = generateSignedUrl({accessKeyId, secretAccessKey, sessionToken})

connect(signedUrl , {
...
transformWsUrl: () => generateSignedUrl({accessKeyId, secretAccessKey, sessionToken})
})
...

function generateSignedUrl({accessKeyId, secretAccessKey, sessionToken}) {
...
return Signer.signUrl(
    endpoint,
    {
      access_key: accessKeyId,
      secret_key: secretAccessKey,
      session_token: sessionToken
    },
    serviceInfo
  )
}

这最初有效。但最终(尤其是在移动设备上,如果选项卡处于非活动状态 1+ 小时),当我尝试重新连接到我的 mqtt 代理时,我收到 403 错误。我猜这是因为我现在有一个新的会话令牌,但仍将旧令牌传递给 .但是,由于不接受 Promises,我不知道在哪里检索要传递给的新令牌。generateSignedUrl()transformWsUrl()generateSignedUrl()

在这种情况下,如何将更新的令牌传递到更新后的令牌?transformWsUrl()

谢谢。

reactjs 亚马逊网络服务 aws-amplify aws-iot mqtt.js

评论


答: 暂无答案