首页 > 解决方案 > AWS Cognito 正确的用户流程

问题描述

我正在尝试将我的基于 PHP 的系统迁移到 AWS,但我正在努力解决的最大问题是用户管理/身份验证方面的事情。我制作了 API 网关和 Lambda 函数来从我的 RDS 实例中获取数据,并且我可以使用 API 密钥或 ID 令牌进行身份验证以保护它们生成的数据。我真正苦苦挣扎的是 Cognito 方面的事情。在我的脑海中,系统将按如下方式工作?

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

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

标签: javascriptamazon-web-servicesjwtamazon-cognito

解决方案


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

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

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

您还可以建立一个 php 服务器,验证 jwt 令牌并执行您通常为经过身份验证的用户所做的事情。

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

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


推荐阅读