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

问题描述 投票:0回答:1

我已成功将 AWS Cognito 集成到我的 Web 应用程序中进行用户身份验证,并将其链接到前端 (Angular),一切都运行良好。但是,我还想在后端(NodeJS)验证用户身份验证。我知道一种方法是在每个请求中发送身份验证令牌,但我不确定如何在后端检查和验证此令牌。

有什么想法吗?

node.js angular amazon-cognito
1个回答
0
投票

JWT token 由 3 段 Base64 编码组成,前两段解码后为 JSON,易于读取和验证。这 3 个部分是:

  • header,其中包含有关令牌的元数据,例如密钥 ID 和用于签署令牌的算法。
  • body/payload,其中包含有关用户、用户池和客户端的声明(如果适用)。
  • 签名是将加密算法应用于标头和有效负载以保证其完整性的结果。

最后一个是最关键的验证,以确保其他所有内容都没有被篡改。这应该通过检索 JSON Web 密钥 (JWK) 来完成,该密钥通常位于

(...)/.well-known/jwks.json
(对于 cognito,它是
https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json
),选择正确的密钥 ID 并使用可用的 JWT 库之一进行验证(例如。AWS JWT 验证)。

确认完整性后,应验证一些声明,例如:

  • exp
    过期时间,请确保尚未过期;
  • iss
    确保它来自 cognito 和正确的用户池;
  • aud
    (ID 令牌)和
    client_id
    (访问令牌)应与 Cognito 客户端 ID 匹配;
  • token_use
    应为
    access
    id
    ,具体取决于所需的令牌使用情况(确保 ID 令牌不用作访问权限,反之亦然)。

诸如上面提到的图书馆,通常也会验证这些字段等等。

您可以在Cognito 开发人员指南 - 验证 JSON Web 令牌中找到更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.