当使用AWS Application Load Balancer(ALB)与Cognito集成时,可能会遇到“无法验证有关请求的身份验证信息:必须提供ID Token以对用户进行身份验证”错误。这是因为在ALB上启用了Cognito身份验证,并且没有提供有效的ID Token。
确保ALB和Cognito之间的集成配置正确,并在请求时提供有效的ID Token。ID Token是Cognito用户身份验证过程中颁发的JWT(JSON Web Token),包含关于用户和其身份验证状态的信息。在请求中发送ID Token可以实现对用户的身份验证并为应用程序提供访问用户有限资源的权限。
以下是在Node.js中使用AWS SDK从请求中解析ID Token的示例代码:
const AWS = require('aws-sdk');
const handler = async (event) => {
const idToken = event.headers.Authorization.split(' ')[1];
try {
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const tokenIdparams = {
AccessToken: idToken,
};
const tokenData = await cognitoidentityserviceprovider.getUser(tokenIdparams).promise();
console.log(tokenData);
return {
statusCode: 200,
body: JSON.stringify(tokenData),
};
} catch (err) {
console.log(err);
return {
statusCode: 401,
body: JSON.stringify({ message: 'Unauthorized' }),
};
}
};
exports.handler = handler;
在这个示例中,我们从请求头中提取ID Token,然后使用AWS SDK的CognitoIdentityServiceProvider对象来解析它。如果成功,我们将返回有关用户的有限数据,否则将返回“未经授权”的错误。