如何通过JavaAPI使用AWS Cognito对用户进行身份验证

如何通过JavaAPI使用AWS Cognito对用户进行身份验证,java,amazon-web-services,spring-security,aws-sdk,aws-cognito,Java,Amazon Web Services,Spring Security,Aws Sdk,Aws Cognito,我们正在构建一个iOS/android应用程序,带有一个Web(角度)门户(用于管理目的)。后端API将使用Java构建,考虑到web门户可以有不同类型的用户,我正在考虑使用Spring security 我正在考虑使用我的后端服务来使用AWS Cognito对用户进行身份验证。我不想将iOS/android/Web直接与AWS Cognito集成,因为将来我们可能需要切换到其他提供商 我不确定这是否可能,但我在想这样的事情: 1.注册API:iOS/Android/Web(具有角色)使用电子邮

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

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

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

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

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

  • 任何其他API:所有其他后端用作获取用户信息,即客户端(iOS/ANDROID/Web)使用令牌调用后端服务,并且备份服务使用相同的令牌使用AWS Cognito对用户进行身份验证

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

  • 我已经阅读了很多关于AWS Cognito的文档,但读得越多,我就越感到困惑。如果有人能通过AWS Cognito让我知道上述内容是否可行,以及如果可行,我将如何继续下去,这将是一个很大的帮助


    提前谢谢

    我认为您应该在客户机上与Cognito集成,尽管您明确指出了以下几点:

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

    通过在服务器端集中处理客户凭据,您增加了客户的风险和潜在威胁。这听起来不像是应用程序的核心业务。这是科尼托的核心业务

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


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

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

    致以最良好的祝愿