首页 > 解决方案 > AWS Serverless:令牌认证

问题描述

我正在开发一个项目,该项目使用在 NodeJS 中编码的 aws lambdas 作为后端。它在 AWS 中以无服务器模式托管。我使用 cognito 作为身份验证 API,我可以成功地从中获取令牌。为了保护我的后端(NodeJS),我添加了以下代码来读取授权标头并使用 cognito-express 验证令牌。

  const authorisedRoute = express.Router();
  app.use(function (req, res, next) {
   res.header("Access-Control-Allow-Origin", "*")
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
   res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');  
   if (req.method !== 'OPTIONS') {
    let accessTokenFromClient = req.headers['Authorization'];
    if (!accessTokenFromClient) return res.status(401).send("Access Token missing from header");

    cognitoExpress.validate(accessTokenFromClient, function (err, response) {
    if (err) return res.status(401).send(err);
    else next();   
    });

    } 
    });

预期行为: 从“授权”标头中读取令牌并使用 cognito-express 进行验证,然后将数据发送回客户端。如果未经验证,我会得到:缺少身份验证令牌。

实际行为: 在本地运行 lambda 时,代码和此机制工作正常(放大调用函数 ...)。但是当我将它部署到云端时,整个功能停止工作,我得到“内部处理错误”作为响应。

云中不允许这种方法吗?有没有更好的方法来使用令牌身份验证来保护我的无服务器 API?谢谢您阅读此篇 :)

标签: node.jsamazon-web-servicesamazon-cognitoaws-serverless

解决方案


推荐阅读