ios - 如何保护 AWS REST 后端以进行移动访问
问题描述
我一直在阅读很多 AWS Amplify 和 Cognito 文档,但似乎没有为此描述直接的方法。
我有的:
我有一个用 Swift 编写的 iOS 应用程序,后端设置在几个 lambda 函数中。我能够以通常的方式访问 REST 端点(就像任何公共 URL 一样)。
因此,我的 iOS 代码中没有集成 Amplify 或 AWS 开发工具包。
我想要什么?
1)包括用户管理:允许用户注册/登录(这已经在我的后端,但我愿意使用 Cognito)
2) 保护我的后端 API,以便只有经过身份验证的用户才能通过移动应用程序访问它。(我可以使用 Postman 提供的用于我自己的开发目的)
我知道的:
我知道有OAuth 2 (PKCE)机制可用于从移动设备进行安全 API 访问,而无需客户端密码,但 AWS 并未明确说明使用哪些工具来真正实现它。
我不介意使用 Cognito(如果一切顺利的话)或我自己的后端 lambda 进行用户管理。唯一的问题是该解决方案必须能够保护我的 REST API。
障碍:
看起来他们的文档非常分散,以至于
根本不讨论 REST。GraphQL 是,他们展示了一种很好的方式,如何使用 GraphQL 模型在 swift 代码中完成所有工作,但对于我的目的来说,这有点过头了。我想像世界上任何其他 REST 端点一样访问它,但以一种安全的方式访问它,但仅限于我的移动应用程序。
AWS SDK与Amplify SDK之间没有明显的区别(我从谷歌那里得到了一些提示,即 Amplify 位于更高级别并抽象了很多选择,但没有具体的)
AWS上的文档非常概念化,但不包含任何有关如何处理此特定用例的示例。
我也观看了一些很棒的Youtube 视频,但它们没有解决这个平台堆栈。
PS: 请不要再提供现成的文档链接。我已经经历了很多,除非他们中的任何一个直接解决我上面的问题,否则恐怕他们无济于事。
更新
我发现了一些关于 Cognito 如何在移动应用程序中处理令牌 + 用户管理的好例子。但是,在这些示例中,注册似乎仍然没有令牌。在 app bundle 中公开 pool id 等详细信息,并假设任何人都可以使用 SDK 注册,则可以轻松获得令牌。即使使用自定义 lambda 授权器,使用智能字符串解析器/提琴手,端点也可以从应用程序包中公开,并且很可能滥用 API。
这些示例可能没有使用 PKCE(我认为他们使用SRP)。或者我错过了一个关键步骤。
假设我使用 AppAuth 从 Cognito 端点获取令牌。如果我想使用 Cognito 用户 ID/密码对用户进行身份验证,这是否合理?
我也对重定向 URI 感到困惑。移动应用程序中的重定向是否必须获取令牌(即使我没有使用任何公共身份验证,如 Google/Facebook)?
解决方案
我始终采取的方向是基于标准的方法,而不是特定于 AWS 的方法,因为您的目标是构建具有最佳未来选项的出色 UI 和 API。
我下面基于教程的博客链接不包括 Amplify,但我认为它们与您相关。这项技术可能会有相当长的学习曲线。
该博客的索引页面有许多分步指南,例如解释无服务器 API 并在您的 PC 上运行它,尽管有些帖子很长而且很详细。
如果您发现其中任何一个有用,请随时发布任何后续问题。
推荐阅读
- python - 如何在 Pandas 中作为 SQL 进行内部连接,陷入以下问题
- angular - 使用 PrimeNG 冷冻色谱柱 - 未对齐
- sql - 在 2 个日期之间填充一定数量的行
- python - 使用 PCA 减少 Python SIFT 描述符
- flutter - 如何为 Codemagic 设置自动构建?
- yii - YII 表单生成器渲染视图不起作用
- random - 在偏向中间的范围内生成随机无符号整数
- c++ - Bjarne C++ PPP 书籍计算器示例代码在哪里?
- swift - 调整大小并将图像保存在磁盘中不保存正确的文件尺寸
- php - 如何在 Laravel 中执行自定义身份验证验证