【发布时间】:2021-12-09 18:40:12
【问题描述】:
我正在努力使用 AWS amplify 来获取特定认知组的用户列表。 我总是遇到这个问题:localhost/:1 Access to XMLHttpRequest at 'https://ixa37ulou3.execute-api.eu-central-1.amazonaws.com/dev/users?groupName=xxx' from origin 'http:// localhost:3000' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。 我尝试了很多东西,请参阅下面的最后一次尝试:
第一步:使用“放大添加函数”创建我的 Lambda 函数:
const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider({region:"eu-central-1"});
exports.handler = async (event) => {
const params = {
GroupName: event.groupName,
UserPoolId: 'eu-central-1_xqIZx0wkT',
};
const cognitoResponse = await cognito.listUsersInGroup(params).promise()
const response = {
statusCode:200,
headers:{
"Access-Control-Allow-Origin":"*",
"Access-Control-Allow-Headers":"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Credentials": true
},
body: JSON.stringify(cognitoResponse),
};
return response;
};
第二步:使用“amplify add api”创建我的REST Api(路径名:/users)
第三步:在 API Gateway 中创建一个新的授权人“使用 cognito 类型并链接到我的用户池,以及令牌来源:授权。对于 /users - ANY - Method Request => 我在授权字段中添加了我的授权人.
第四步:创建我的调用 API 函数:
async function callApi(){
const user = await Auth.currentAuthenticatedUser()
const token = user.signInUserSession.idToken.jwtToken
console.log({token})
const requestInfo = {
headers:{
Authorization: token
},
queryStringParameters:{
groupName:"MyuserGroup"
}
}
const data = await API.get('apilistusers','/users',requestInfo)
console.log({data})
}
非常感谢您对此主题的任何帮助,非常感谢。
【问题讨论】:
-
您缺少 CORS 端点 - 请参阅我的回答 here,了解如何根据您的 API GW 配置进行设置。
-
嗨@ErmiyaEskandary,我听从了你的建议。当我在 lambda 中尝试我的 lambda 函数时,它可以工作。当我在 API 网关中测试我的 API 时,它也可以工作,但 API 网关跳过授权......从我的 API 我仍然面临这个问题:localhost/:1 Access to XMLHttpRequest at 'xxx' from origin '@987654323 @' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。我错过了一些授权吗?我向 iam 添加了良好的策略,以便能够使用 listUsersInGroup 认知功能。
-
与授权无关——你使用的是代理还是非代理?你确定你有一个返回正确值的 OPTIONS 端点吗?
-
我找到了解决问题的新方法,我启用了放大 adminQueries 身份验证。我更新了生成的代码(api/fulambda 函数)以满足我的需要。我想就像你说的那样,也许我的选项端点等有问题。但我无法用我在这个领域的小技能来解决这个问题。再次感谢您的帮助@ErmiyaEskandary
标签: amazon-web-services api aws-lambda amazon-cognito amplify