可能的解决方法有两个,具体取决于您的Cognito用户池配置:
如果您的Cognito用户池启用了"OAuth2.0" > "资源服务器" > "默认授权范围"中的“openid”,则Cognito授权器需要访问id_token来验证用户身份。确保您的请求中带有有效的id_token,以便授权器可以验证它。
如果您的Cognito用户池未启用"OAuth2.0" > "资源服务器" > "默认授权范围"中的“openid”,则Cognito授权器需要访问access_token来验证用户身份。确保您的请求中带有有效的access_token,以便授权器可以验证它。
下面是一个代码示例,将有效的id_token包含在API请求的Authorization标头中来验证用户身份(假设您已经安装了AWS SDK for JavaScript):
const AWS = require('aws-sdk');
AWS.config.update({region: 'YOUR_REGION'});
const apigw = new AWS.APIGateway({apiVersion: '2015-07-09'});
const cognito = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});
const params = {
restApiId: 'YOUR_REST_API_ID',
stageName: 'dev',
method: 'GET',
resourceId: 'YOUR_RESOURCE_ID',
httpMethod: 'GET',
authorizationToken: 'Bearer ' + id_token, // 将有效的id_token包含在Authorization标头中
requestContext: {}
};
apigw.invoke(params, (error, response) => {
if (error) {
console.error(error);
} else {
console.log(response);
}
});
请注意,此示例将有效的id_token包含在请求的Authorization标头中。“YOUR_REGION”、“YOUR_REST_API_ID”、“YOUR_RESOURCE_ID”等参数应替换为您自己的值。