【发布时间】:2020-05-06 19:30:25
【问题描述】:
我已经阅读了很多 AWS Amplify 和 Cognito 文档,但似乎没有为此描述直接的方法。
我有什么:
我有一个用 Swift 编写的 iOS 应用程序,后端设置在几个 lambda 函数中。我能够以通常的方式访问 REST 端点(就像任何公共 URL 一样)。
因此,我的 iOS 代码中没有集成 Amplify 或 AWS SDK。
我想要什么?
1) 包括用户管理:允许用户注册/登录(这已经在我的后端,但我愿意使用 Cognito)
2) 保护我的后端 API,以便只有经过身份验证的用户才能通过移动应用访问它。(我可以从 Postman 将它用于我自己的开发目的)
我所知道的:
我知道有 OAuth 2 (PKCE) 机制可用于从移动设备安全地访问 API,而无需客户端机密,但 AWS 并未明确说明使用哪些工具来真正实现它。 p>
我不介意使用 Cognito(如果一切顺利的话)或我自己的后端 lambda 进行用户管理。唯一的问题是该解决方案必须能够保护我的 REST API。
障碍:
看起来他们的文档非常分散,以至于
根本不讨论 REST。 GraphQL 是,他们展示了一种很好的方式,如何使用 GraphQL 模型在 swift 代码中完成所有工作,但对于我的目的来说,这有点过头了。我想像世界上任何其他 REST 端点一样访问它,但以一种仅限于我的移动应用的安全方式访问它。
-
AWS SDK 与 Amplify SDK 之间没有明显的区别(我从谷歌那里得到了一些提示,即 Amplify 处于更高级别并抽象了很多选择,但没有具体的内容)
李> Documentation on AWS 是非常概念化的,但不包含任何关于如何处理此特定用例的示例。
我也看过一些很棒的 Youtube videos,但他们没有解决这个平台堆栈。
PS: 请不要再提供现成的文档链接。我已经经历了很多,除非他们中的任何一个直接解决我上面的问题,否则我怕他们无济于事。
更新
我发现了一些很好的examples Cognito 如何在移动应用程序中处理令牌+用户管理。但是,在这些示例中,注册似乎仍然没有令牌。在 app bundle 中公开 pool id 等详细信息,并假设任何人都可以使用 SDK 进行注册,则可以轻松获得令牌。即使使用自定义 lambda 授权器,使用智能字符串解析器/提琴手,端点也可以从应用程序包中公开,并且很可能滥用 API。
这些示例可能没有使用 PKCE(我认为它们使用了SRP)。或者我错过了一个关键步骤。
假设我使用 AppAuth 从 Cognito 端点获取令牌。如果我想使用 Cognito 用户名/密码对用户进行身份验证,这是否合理?
我也对重定向 URI 感到困惑。移动应用程序中的重定向是否必须获得令牌(即使我没有使用任何公共身份验证,如 Google/Facebook)?
【问题讨论】:
-
你可以用放大做你想做的一切。
标签: ios oauth-2.0 aws-lambda amazon-cognito aws-amplify