【发布时间】:2020-06-15 23:24:04
【问题描述】:
我正在尝试将我的基于 PHP 的系统迁移到 AWS,但我遇到的最大问题是用户管理/身份验证方面的事情。我制作了 API 网关和 Lambda 函数来从我的 RDS 实例中获取数据,并且我可以使用 API 密钥或 ID 令牌进行身份验证以保护它们生成的数据。我真正苦苦挣扎的是 Cognito 方面的事情。在我的脑海中,系统会按如下方式工作?
- 用户访问我的网站并单击登录按钮。
- 用户被重定向到托管的认知用户界面并登录。
- 用户被重定向到所选页面,并且 id 令牌显示在 URL 中
- 我使用 JavaScript 将 ID 令牌存储在本地存储中(不确定这是正确的方式)
- 然后我可以提取 ID 令牌并在 SDK 中使用它来运行和验证我的 API
在 PHP 中,我会在加载页面之前检查会话是否存在,以防止未登录的用户访问我的系统,如果会话不存在,他们将被重定向到登录页面。如何使用 Cognito/JWT 执行此操作,我是否需要在我的站点的每个 HTML 页面顶部使用 Lambda 函数验证 JWT?我基本上只想允许通过 Cognito 用户池登录的用户访问我系统的所有 HTML、js、CSS 文件,主页除外。
【问题讨论】:
-
您如何托管静态内容?如果它由服务器(节点、php 等)托管,您可以检查令牌的标头,然后有条件地呈现您的应用程序,就像您处理会话一样。如果您托管的是纯静态内容(例如在 s3 中),那么您必须在客户端的应用程序上保护路由。但总的来说,保护你的 CSS 和其他静态内容会很困难
-
@RobertMoskal 我还没有真正考虑过托管。我的 API 返回 JSON 数据,因此我将使用 javascript 将其解析为表、链接等,就像我在 PHP 中使用从数据库返回的数组一样。这真的很烦人,因为我确切地知道我希望我的系统如何工作我只是没有编码和 AWS 的知识来找出我应该做的确切方式。托管在全栈 Web 服务器上不是问题,我想它可以让我使用我非常熟悉的 PHP。
-
@RobertMoskal *" 如果您托管纯静态内容(如在 s3 中),那么您必须在客户端的应用程序上保护路由。" - 我不认为它必须是客户端?如果您的 S3 前面是 Cloudfront 发行版,您可以通过 Lambda@Edge 来完成
-
是的。一个可以做到的!那将是一条路!
标签: javascript amazon-web-services jwt amazon-cognito