首页 > 解决方案 > 如何保护 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。

障碍:

看起来他们的文档非常分散,以至于

PS: 请不要再提供现成的文档链接。我已经经历了很多,除非他们中的任何一个直接解决我上面的问题,否则恐怕他们无济于事。

更新

我发现了一些关于 Cognito 如何在移动应用程序中处理令牌 + 用户管理的好例子。但是,在这些示例中,注册似乎仍然没有令牌。在 app bundle 中公开 pool id 等详细信息,并假设任何人都可以使用 SDK 注册,则可以轻松获得令牌。即使使用自定义 lambda 授权器,使用智能字符串解析器/提琴手,端点也可以从应用程序包中公开,并且很可能滥用 API。

这些示例可能没有使用 PKCE(我认为他们使用SRP)。或者我错过了一个关键步骤。

假设我使用 AppAuth 从 Cognito 端点获取令牌。如果我想使用 Cognito 用户 ID/密码对用户进行身份验证,这是否合理?

我也对重定向 URI 感到困惑。移动应用程序中的重定向是否必须获取令牌(即使我没有使用任何公共身份验证,如 Google/Facebook)?

标签: iosoauth-2.0aws-lambdaamazon-cognitoaws-amplify

解决方案


我始终采取的方向是基于标准的方法,而不是特定于 AWS 的方法,因为您的目标是构建具有最佳未来选项的出色 UI 和 API。

我下面基于教程的博客链接不包括 Amplify,但我认为它们与您相关。这项技术可能会有相当长的学习曲线。

  • 这是我在 API 中验证 Cognito 令牌的一些代码。

  • 我有使用 Cognito 令牌调用 API 的云托管版本的工作演示 Web 和移动 UI - 您可以从该页面快速运行 UI 。

该博客的索引页面有许多分步指南,例如解释无服务器 API 并在您的 PC 上运行它,尽管有些帖子很长而且很详细。

如果您发现其中任何一个有用,请随时发布任何后续问题。


推荐阅读