问题是由于在使用ALB和Cognito进行用户身份验证时,缺少必需的Id令牌而导致的。解决此问题的一种方法是使用AWS SDK for JavaScript中的AWS.CognitoIdentityServiceProvider类获取Id令牌,并将其传递到ALB上。下面是一个使用Node.js和Express框架的示例代码:
const AWS = require('aws-sdk');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// 配置AWS SDK
AWS.config.update({
region: 'us-east-1'
});
// 配置Cognito Identity Provider
const cognitoISP = new AWS.CognitoIdentityServiceProvider({
apiVersion: '2016-04-19',
region: 'us-east-1'
});
// 解析HTTP请求正文的中间件
app.use(bodyParser.json());
// 处理该API端点的路由
app.get('/protected', (req, res) => {
// 从授权请求头中获取访问令牌
const accessToken = req.headers.authorization.split(' ')[1];
// 使用令牌获取用户信息
cognitoISP.getUser({
AccessToken: accessToken
}, (err, data) => {
if (err) {
res.status(401).send(err);
} else {
const userId = data.Username;
// 将用户ID传递到ALB,以便它能够对用户进行授权或者重定向
res.status(200).send(`Welcome, ${userId}!`);
}
});
});
// 启动服务器
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});
这个例子演示了如何使用AWS SDK for JavaScript获取Cognito中用户的信息,然后将用户ID发布到保护端点。通过使用身份验证令牌获取用户ID并传递它到保护端点,可以解决“ALB Cognito集成-Id令牌丢失”的问题。