javascript - AWS Cognito 正确的用户流程
问题描述
我正在尝试将我的基于 PHP 的系统迁移到 AWS,但我正在努力解决的最大问题是用户管理/身份验证方面的事情。我制作了 API 网关和 Lambda 函数来从我的 RDS 实例中获取数据,并且我可以使用 API 密钥或 ID 令牌进行身份验证以保护它们生成的数据。我真正苦苦挣扎的是 Cognito 方面的事情。在我的脑海中,系统将按如下方式工作?
- 用户访问我的网站并单击登录按钮。
- 用户被重定向到托管的 cognito UI 并登录。
- 用户被重定向到所选页面,并且 id 令牌显示在 URL 中
- 我使用 JavaScript 将 ID 令牌存储在本地存储中(不确定这是正确的方法)
- 然后我可以提取 ID 令牌并在 SDK 中使用它来运行和验证我的 API
在 PHP 中,我会在加载页面之前检查会话是否存在,以防止未登录的用户访问我的系统,如果会话不存在,他们将被重定向到登录页面。如何使用 Cognito/JWT 执行此操作,我是否需要在我的站点的每个 HTML 页面顶部使用 Lambda 函数验证 JWT?我基本上只想允许通过 Cognito 用户池登录的用户访问我系统的所有 HTML、js、CSS 文件,主页除外。
解决方案
听起来你已经解决了大部分认知问题。
如果您从 Web 客户端调用 api 网关,您很可能会在标头中传递该 jwt 令牌,并且这些 api 调用将在用户登录之前失败。
如果您使用的是客户端框架(React、Vue 等),那么您可能可以访问渲染各种 UI 组件的路由器。这与您在 php 中的服务器上所做的工作类似,并且非常容易锁定某些路由或基于用户登录的某些组件的呈现。在没有框架的情况下执行此操作可能需要大量的努力。
您还可以建立一个 php 服务器,验证 jwt 令牌并执行您通常为经过身份验证的用户所做的事情。
或者您可以采用超现代的无服务器方法。您可以将您的 html/css 托管在 S3 存储桶中,并在其前面放置一个 Cloudfront 发行版。您可以编写一些 Lambda@Edge 函数来对 S3 存储桶中的内容实施权限。
很可能,如果您正在创建一个基于 api 的 javascript 应用程序,您将不需要保护您的标记/css。
推荐阅读
- swift - 地图视图不以当前用户位置为中心
- blockchain - 使用 bitcore 库生成公共地址时出错
- abstract - 如何在 Swift 中创建抽象方法来创建 BehaviorRelay?
- python-3.x - 创建可变大小数组
- angular7 - 模块没有导出成员 AnimationTransitionEvent
- sql - 如何获取分组列具有最大值的组
- python - Python:如何在现有 xlsx 上写入而不覆盖其他列
- hive - Jow 在 hive 中使用 json serde 提取字段
- kubernetes - Kubernetes 中的负载均衡器
- java - 如何过滤列表
用java流收集?