You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NodeJS中验证AWS Cognito用户身份认证

在Node.js后端验证AWS Cognito令牌的实现步骤

1. 安装依赖

使用AWS官方推荐的aws-jwt-verify库处理令牌验证,避免手动解析JWT的复杂逻辑:

npm install aws-jwt-verify

2. 初始化Cognito令牌验证器

根据你的AWS Cognito配置信息创建验证实例,指定用户池ID、客户端ID和令牌类型(access用于权限校验,id用于获取用户身份信息):

const { CognitoJwtVerifier } = require("aws-jwt-verify");

const cognitoVerifier = CognitoJwtVerifier.create({
  userPoolId: "us-east-1_XXXXXXXXX", // 替换为你的用户池ID
  tokenUse: "access",
  clientId: "XXXXXXXXXXXXXXXXXXXXXXXX", // 替换为你的Cognito客户端ID
});

3. 从请求中提取令牌

前端会将令牌放在Authorization请求头中,格式为Bearer <token>,编写工具函数提取令牌:

function getAuthToken(req) {
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith("Bearer ")) {
    return null;
  }
  return authHeader.split(" ")[1];
}

4. 编写身份验证中间件(以Express为例)

创建Express中间件,实现令牌验证逻辑,验证通过后将用户信息挂载到请求对象上:

async function validateCognitoToken(req, res, next) {
  const token = getAuthToken(req);
  if (!token) {
    return res.status(401).json({ error: "未提供有效认证令牌" });
  }

  try {
    // 验证令牌并解析 payload
    const userPayload = await cognitoVerifier.verify(token);
    req.user = userPayload;
    next();
  } catch (error) {
    // 令牌过期、签名无效等情况都会触发错误
    return res.status(401).json({ error: "认证令牌无效或已过期" });
  }
}

5. 在受保护路由中使用中间件

将验证中间件添加到需要身份验证的路由上,只有验证通过的请求才能访问:

const express = require("express");
const app = express();

// 受保护路由示例
app.get("/api/user/profile", validateCognitoToken, (req, res) => {
  res.json({
    message: "成功访问受保护资源",
    userInfo: {
      username: req.user.username,
      userId: req.user.sub
    }
  });
});

app.listen(3000, () => console.log("后端服务启动在3000端口"));

关键注意事项

  • 令牌类型选择:如果只需验证用户身份,可使用id令牌;如果需要校验用户权限,优先使用access令牌。
  • 区域一致性:确保后端配置的AWS区域与Cognito用户池所在区域完全一致。
  • 自动验证逻辑:aws-jwt-verify会自动处理令牌的签名验证、过期检查、受众(aud)校验,无需手动实现这些安全逻辑。

内容的提问来源于stack exchange,提问作者iEmad00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:43:12