【发布时间】:2021-05-26 03:27:22
【问题描述】:
我在 API 网关上有一个端点,我想用IAM_AUTH 调用来保护它。我正在使用aws-4axios 来生成 AWSv4 签名。
export default class API {
stage = (process.env.REACT_APP_STAGE || 'dev').toUpperCase();
client: AxiosInstance;
constructor(accessKey: string, secretKey: string) {
const interceptor = aws4Interceptor(
{
region: 'us-east-1',
service: 'execute-api',
},
{
accessKeyId: accessKey,
secretAccessKey: secretKey,
},
);
this.client = axios.create();
this.client.interceptors.request.use(interceptor);
}
public async createSetupIntent(customer_id: string): Promise<void> {
const response = await this.client.post(
`${process.env[`REACT_APP_API_ENDPOINT_${this.stage}`]}/${CREATE_SETUP_INTENT_ENDPOINT}`,
JSON.stringify({ customer_id }),
);
console.log(response);
}
}
我遇到的问题是我在浏览器中执行此客户端,chrome 抛出一个错误,设置 API Gateway requires 的 Host 标头,这反过来又导致 API Gateway 返回 403 响应。
拒绝设置不安全的标头“主机”
我猜这是为了防止我正在尝试做的事情 - 使用访问/密钥客户端。
我从客户端而不是服务器端执行此操作并且没有 cognito 的原因是因为最终这些请求将在服务器上完成。这只是在我们与其他服务器集成之前,在开发应用程序的其他方面时使用的虚拟/概念证明/临时解决方案。
是否可以在没有 cognito 的情况下从浏览器调用 IAM_AUTH 端点?
【问题讨论】:
标签: typescript http axios aws-api-gateway