javascript - AWS Cognito 正确的用户流程

标签 javascript amazon-web-services jwt amazon-cognito

我正在尝试将基于 PHP 的系统迁移到 AWS,但我遇到的最大困难是用户管理/身份验证方面。我创建了 API 网关和 Lambda 函数来从 RDS 实例获取数据,并且可以使用 API key 或 ID token 进行身份验证,以保护它们生成的数据。我真正遇到的困难是 Cognito 方面。在我看来,系统的工作原理如下?

  1. 用户访问我的网站并单击登录按钮。
  2. 用户被重定向到托管 Cognito UI 并登录。
  3. 用户被重定向到所选页面,并且 ID token 显示在 URL 中
  4. 我使用 JavaScript 将 ID token 存储在本地存储中(不确定这是正确的方法)
  5. 然后我可以取出 ID token 并在 SDK 中使用它来运行和验证我的 API

在 PHP 中,我会在加载页面之前检查 session 是否存在,以防止未登录的用户访问我的系统,如果 session 不存在,他们将被重定向到登录页面。如何使用 Cognito/JWT 执行此操作?我是否需要在我的网站的每个 HTML 页面顶部使用 Lambda 函数验证 JWT?我基本上只想允许通过 Cognito 用户池登录的用户访问我系统中除主页之外的所有 HTML、js、CSS 文件。

最佳答案

听起来您已经解决了大部分认知问题。

如果您从 Web 客户端调用 api 网关,您很可能会在 header 中传递该 jwt token ,并且这些 api 调用将在用户登录之前失败。

如果您使用客户端框架(React、Vue 等),那么您可能可以访问呈现各种 UI 组件的路由器。这与您在 php 中在服务器上执行的操作类似,并且根据登录的用户锁定某些路由或某些组件的呈现非常容易。如果没有框架,则可能需要大量的工作。

您还可以建立一个 php 服务器,验证 jwt token 并执行通常为经过身份验证的用户执行的操作。

或者您可以采用超现代的无服务器方法。您可以将 html/css 托管在 S3 存储桶中,并在其前面放置一个 Cloudfront 发行版。您可以编写一些 Lambda@Edge 函数来强制对 S3 存储桶中的内容执行权限。

很可能,如果您正在创建基于 api 的 javascript 应用程序,则不需要保护您的标记/css。

关于javascript - AWS Cognito 正确的用户流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60509615/

相关文章:

amazon-web-services - Amazon s3 预签名 URL 受 IP 地址限制

amazon-web-services - 限制 lambda 函数的非保留并发

javascript - aws-sdk 获取文件信息

firebase - 900个字符的Firebase Auth idToken大小正常吗?

ruby-on-rails - rails : Microservice architecture with dedicated authorization service and app services using Knock (JWT)

javascript - JS 中的 native OS X 应用程序?

javascript - Highcharts 同步图表以在 snap 为 false 时显示十字准线

javascript - <td> 标签在注入(inject) MooTools Elements 时从文本中剥离

asp.net-core - 使用 OpenId Connect 进行基于声明的身份验证

javascript - jquery 日期选择器不适用于母版页