5

我们正在构建一个带有 Web(角度)门户(用于管理目的)的 iOS/android 应用程序。后端 API 将使用 Java 构建,考虑到 Web 门户可以有不同类型的用户,我正在考虑使用 Spring 安全性。

我正在考虑使用我的后端服务来使用 AWS Cognito 对用户进行身份验证。我不想将 iOS/Andorid/Web 直接与 AWS Cognito 集成,因为将来我们可能需要切换到其他提供商。

我不确定这是否可能,但正在考虑这样的事情: 1. 注册 API:iOS/Android/Web(带角色)使用电子邮件和密码调用我的后端服务。后端服务向 AWS Cognito 注册用户。AWS Cognito 将为该用户返回一个标识符,以及我将在本地数据库中使用的相同标识符来创建链接 b/w 用户以及角色和其他表。后端服务将向客户端(iOS/Android 和 Web)返回一个 json 响应,说明用户已创建。

  1. 登录 API:iOS/Android/Web(带角色)使用电子邮件和密码调用我的后端服务。后端服务将电子邮件和密码传递给 AWS Cognito。如果用户可用,AWS Coginto 返回一个令牌(带有过期时间),该令牌通过后端服务传递给客户端(iOS/Andorid/Web),如果它不可用,则抛出异常。

  2. 获取用户信息 API:一旦用户登录,iOS/Android/Web(带有角色)使用令牌(从登录 API 获取)调用我的后端服务。后端服务使用 AWS Cognito 验证令牌。如果令牌有效,AWS Cognito 还会返回用户信息,例如电子邮件和标识符,以在我的本地数据库中识别用户。

  3. 任何其他 API:所有其他后端都作为获取用户信息工作,即客户端(iOS/Andorid/Web)使用令牌调用后端服务,并且支持服务使用相同的令牌使用 AWS Cognito 对用户进行身份验证。

  4. 注销 API。调用此 API 后,令牌应失效。

我已经阅读了很多关于 AWS Cognito 的文档,但我读到的越多,我就越感到困惑。如果有人可以让我知道上述是否可以通过 AWS Cognito 实现,那将是一个很大的帮助,如果可以,我该如何继续。

提前致谢!!

4

2 回答 2

1

我认为您应该在客户端上与 Cognito 集成,即使您明确指出以下内容:

我不想将 iOS/Andorid/Web 直接与 AWS Cognito 集成,因为将来我们可能需要切换到其他提供商。

通过在服务器端汇总处理客户凭据,您正在增加对客户的风险和潜在威胁。这听起来不像您的应用程序的核心业务。这是Cognito的核心业务。

在我看来,在客户端上与 Cognito 集成可以解决您的所有问题。我只是不确定是否要取回用户元数据(如电子邮件地址),但无论如何,你自己做部分的工作要比做任何事情都要少得多。

此外,即使您希望在将来切换身份提供商,Cognito 也支持多个(Google、Facebook、Amazon),如果您真的需要,甚至可以自定义一个。

于 2017-05-01T16:33:00.813 回答
1

正如@Viccari 在他的回复中解释的那样,您不应该提供有关安全性的“自定义”解决方案。最好的方法是将 Cognito SDK 集成到您的客户端代码中。它将处理与您的代币有关的所有事情。另外,如果您的应用程序使用 AWS API Gateway,您可以将 API 配置为使用Cognito Authorizer。无论如何,如果您真的需要自定义身份验证,我建议使用Developer Authenticated Identities,它提供了一种机制,允许您在与 Cognito 集成的同时对用户进行身份验证。

此致,

于 2017-09-07T07:01:14.770 回答