【发布时间】:2019-08-24 08:35:56
【问题描述】:
我想哭,我真的想哭。我已经有这个问题3天了。我在 aws lambda 中有一个 POST API,当我在 aws lambda 或 cli 中测试它时,它工作正常。但不是从我的客户端调用 API 时。我收到以下错误 POST https://sdigg5u4xb.execute-api.eu-west-1.amazonaws.com/prod/sites 403 和 Uncaught (in promise) Error: Request failed with status code 403
at createError (createError.js:17)
at settle (settle.js:19)
at XMLHttpRequest.handleLoad (xhr.js:78)
起初我以为这与 CORS 有关,但事实并非如此。由于这是一个 403 错误,它必须与权限有关吗? 我尝试为我的 aws 用户提供不同的策略和角色以有权执行所有操作,但我无法使其正常工作。在我哭之前请帮助我。如果有人需要我的任何 aws 信息,请询问
Lambda 代码:https://pastebin.com/vWNUQH0T
调用 API:
从“aws-amplify”导入 { API };
export default (async function submitSite(values) {
console.log(values);
return API.post("sites", "/sites", {
body: values
})
});
在我的 index.js 中放大配置
Amplify.configure({
Auth: {
mandatorySignIn: true,
region: config.cognito.REGION,
userPoolId: config.cognito.USER_POOL_ID,
identityPoolId: config.cognito.IDENTITY_POOL_ID,
userPoolWebClientId: config.cognito.APP_CLIENT_ID
},
Storage: {
region: config.s3.REGION,
bucket: config.s3.BUCKET,
identityPoolId: config.cognito.IDENTITY_POOL_ID
},
API: {
endpoints: [
{
name: "sites",
endpoint: config.apiGateway.URL,
region: config.apiGateway.REGION
},
]
}
});
serverless.yml
functions:
# Defines an HTTP API endpoint that calls the main function in create.js
# - path: url path is /notes
# - method: POST request
# - cors: enabled CORS (Cross-Origin Resource Sharing) for browser cross
# domain api call
# - authorizer: authenticate using the AWS IAM role
createSite:
handler: CreateSite.main
events:
- http:
path: sites
method: post
cors: true
authorizer: aws_iam
【问题讨论】:
-
您需要发布您的 Lambda 代码。承诺返回一个未处理的异常。这可能是权限问题,但除非您处理异常并
console.log它(登录 Cloudwatch),否则您将无法知道真正的问题。 -
@Annjawn 感谢您的回复!我添加了 lambda 代码。我使用 pastebin 是因为它很长并且希望保持可读性。
-
我们需要您用来调用 API 的代码。确保发送带有 id 令牌的 Authorization 标头。
-
@cmaronchick 我已经在我调用 api 的地方插入了代码
-
您的
authorizer是aws_iam。因此,您需要secret key、access key和token来针对您的 API 进行身份验证 - 而不是Cognito user pool的jwt令牌。你是如何认证的?
标签: amazon-web-services aws-lambda amazon-cognito