为什么 AWS-SDK API 请求不断返回缺少身份验证令牌?
Why do AWS-SDK API requests keep returning Missing Authentication Token?
我正在使用我的 EC2 中的 AWS-SDK、运行 发出 Node.js API 请求。但他们不断返回错误 403:
{"message":"Missing Authentication Token"}
我正在尝试访问 Amazon SES 端点。我在 IAM 中设置了一个用户,其中添加了一个策略。它的策略名称是 AmazonSESFullAccess
。此用户的密钥和秘密存储在 ~/.aws/credentials
.
中
这应该足以验证和授权我的请求:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html
我还使用推荐的 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
变量将它们添加到我项目的 .env
文件中。
这也应该成功验证和授权我的调用:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html
根据这些,如果我使用 AWS-SDK 发送我的请求,我不需要在 headers 或查询参数中签名:https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html
代码如下:
test: async () => {
/**
* Call AWS SES API
* Returns information about the account
* https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetAccount.html
*/
return new Promise(resolve => {
axios
.get("https://email.us-east-1.amazonaws.com/v2/email/account")
.then(res => {
console.log(res);
resolve(res);
})
.catch(error => {
console.error(error)
});
});
}
为什么我无法访问任何资源?我能做些什么来修复它?
您没有使用 NodeJS AWS SDK。您只是使用 axios
发送一个“正常”的 HTTP 请求。您发送的请求根本不知道任何 AWS 身份验证凭据。
这就是您发出未经身份验证的请求并收到相应错误“缺少身份验证令牌”的原因。
您应该使用 AWS SDK 与 AWS“对话”API:
var sesv2 = new AWS.SESV2();
var params = {};
sesv2.getAccount(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
参见:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SESV2.html#getAccount-property
AWS 开发工具包将读取凭证并处理验证请求。
我正在使用我的 EC2 中的 AWS-SDK、运行 发出 Node.js API 请求。但他们不断返回错误 403:
{"message":"Missing Authentication Token"}
我正在尝试访问 Amazon SES 端点。我在 IAM 中设置了一个用户,其中添加了一个策略。它的策略名称是 AmazonSESFullAccess
。此用户的密钥和秘密存储在 ~/.aws/credentials
.
这应该足以验证和授权我的请求:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html
我还使用推荐的 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
变量将它们添加到我项目的 .env
文件中。
这也应该成功验证和授权我的调用:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html
根据这些,如果我使用 AWS-SDK 发送我的请求,我不需要在 headers 或查询参数中签名:https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html
代码如下:
test: async () => {
/**
* Call AWS SES API
* Returns information about the account
* https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetAccount.html
*/
return new Promise(resolve => {
axios
.get("https://email.us-east-1.amazonaws.com/v2/email/account")
.then(res => {
console.log(res);
resolve(res);
})
.catch(error => {
console.error(error)
});
});
}
为什么我无法访问任何资源?我能做些什么来修复它?
您没有使用 NodeJS AWS SDK。您只是使用 axios
发送一个“正常”的 HTTP 请求。您发送的请求根本不知道任何 AWS 身份验证凭据。
这就是您发出未经身份验证的请求并收到相应错误“缺少身份验证令牌”的原因。
您应该使用 AWS SDK 与 AWS“对话”API:
var sesv2 = new AWS.SESV2();
var params = {};
sesv2.getAccount(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
参见:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SESV2.html#getAccount-property
AWS 开发工具包将读取凭证并处理验证请求。