amazon-web-services - 使用 AWS_IAM 授权方法和自定义域连接到 AWS API Gateway WebSockets API
问题描述
我已经使用 WebSocket 协议设置了 AWS API 网关。使用以下代码,我能够连接。
import React, { useState, useEffect, useRef } from 'react';
import { Signer, Auth} from 'aws-amplify';
import Sockette from 'sockette';
export default function WebsocketSmaple(props) {
const [messages, setMessages] = useState([]);
const socketRef = useRef();
useEffect(() => {
async function connectWebsocket(){
const credentials = await Auth.currentCredentials();
const accessInfo = {
access_key: credentials.accessKeyId,
secret_key: credentials.secretAccessKey,
session_token: credentials.sessionToken,
}
let signedUrl = Signer.signUrl('wss://MY-API-ID.execute-api.REGION.amazonaws.com/dev', accessInfo)
socketRef.current = new Sockette(signedUrl , {
timeout: 5000,
maxAttempts: 1,
onopen: e => console.log('Connected!', e),
onmessage: e => {
console.log('Received:', e)
setMessages(prev => [...prev, e.data])
},
onreconnect: e => console.log('Reconnecting...', e),
onmaximum: e => console.log('Stop Attempting!', e),
onclose: e => console.log('Closed!', e),
onerror: e => console.log('Error:', e)
});
}
connectWebsocket()
return () => {
socketRef.current.close();
};
}, []);
...some codes
}
但是当我设置自定义域名并更改代码如下所示时,出现以下错误。
let signedUrl = Signer.signUrl('wss://MY-API-ID.execute-api.REGION.amazonaws.com/dev', accessInfo)
至
let signedUrl = Signer.signUrl('wss://MY-CUSTOM-DOMAIN-NAME/MAPPED-PATH', accessInfo)
错误
Uncaught (in promise) TypeError: Cannot read property 'byteLength' of undefined
at isEmptyData (jsSha256.ts:93)
at Sha256.update (jsSha256.ts:34)
at encrypt (Signer.ts:27)
at get_signing_key (Signer.ts:220)
at Function.Signer.signUrl (Signer.ts:413)
at websocket (WebsocketSmaple.js:40)
如何使用自定义域名和 AWS_IAM 授权方法进行连接?
谢谢你。
解决方案
推荐阅读
- python - 函数返回自身而不是 str 值
- python - 基于公共辅助列从数据框中的列生成值列表的有效方法
- tensorflow - KeyError:使用 Huggingface Transformers 使用 BioASQ 数据集时出现“答案”错误
- python - 使用唯一 url (python) 抓取网站
- google-apps-script - 如何在同一个 Google Drive 中共享 google sheet 宏?
- gremlin - 如何在gremlin中进行遍历的交集
- javascript - 如何检查复选框是否被选中?
- python - 在 Python2.7 中应用 Async
- sql - PostgreSQL 随机化外键
- oauth-2.0 - OAuth-2.0/JWT - 关于何时使用范围与角色的指南