如何将 AWS Cognito 与自定义 NodeJS 服务器结合使用?

How do you use AWS Cognito with a custom NodeJS server?

我正在使用 Angular 和 NodeJS 构建应用程序。

我听说过 AWS Cognito 并想在我的应用程序中使用它。然而,文档中并不清楚它应该如何工作。

There is an example 关于如何将 Cognito 与 Angular SPA 一起使用,但没有关于如何使用它在我的支持 NodeJS 服务器上对用户进行身份验证的消息。

NodeJS 应该如何知道用户是否已登录?我可以想到几个可能的答案,但是 none 出现在文档中,而且令人惊讶的是没有代码示例。所以我决定在投入大量时间试错之前在这里问一下。

您可以在后端 NodeJS 服务器中使用 AWS Cognito 用户池来对用户进行身份验证。步骤如下

  • 创建 Cognito 用户池并设置 App 客户端。
  • 创建一个 Cognito 用户池(如果您希望您的用户直接允许受控访问 AWS 服务,则可以选择 Cognito 联合身份)。
  • 配置托管的 Cognito UI(内置登录页面和可选的注册页面)。
  • 对于用户登录,将用户重定向到此域 URL 以进行登录。
  • 设置应用程序客户端,重定向 URL 到您的应用程序以实现 Oauth2 流程。
  • 用户登录后,您将在 URL 中收到一个 id_token(例如,在隐式授权流程中),您可以将其转发到您的 NodeJS 服务器,您可以在其中使用 NodeJS 中间件对其进行验证。
  • 您可以决定是将 id_token 存储在 cookie 中还是浏览器存储中,并为后续请求执行相应的存储和验证。

注意:由于 id_token 是标准的 JavaScript Web 令牌 (JWT),您可以找到一个库来验证它。请参阅 AWS documentation Using Tokens with User Pools 了解更多详情。