我们正在构建一个带有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用户以及角色和其他表。后端服务将返回一个json响应给客户端(iOS / Android和Web),说明用户已创建。
登录API:iOS / Android / Web(带角色)通过电子邮件和密码调用我的后端服务。后端服务将电子邮件和密码传递给AWS Cognito。如果用户可用,AWS Coginto将返回通过后端服务传递给客户端(iOS / Andorid / Web)的令牌(具有过期时间),如果它不可用,则会抛出异常。
获取用户信息API:用户登录后,iOS / Android / Web(带角色)使用令牌(从Login API获取)调用我的后端服务。后端服务使用AWS Cognito验证令牌。如果令牌有效,AWS Cognito也会返回用户信息,如电子邮件和标识符,以标识本地数据库中的用户。
任何其他API:所有其他后端用作获取用户信息,即客户端(iOS / Andorid / Web)使用令牌调用后端服务,并且支持的服务使用相同的令牌来使用AWS Cognito对用户进行身份验证
Logout API。调用此API后,令牌应失效。
我已经阅读了很多关于AWS Cognito的文档,但是我读到的内容越来越多。如果有人可以通过AWS Cognito告诉我上述是否可行,那将是一个很大的帮助,如果是,我该如何继续。
提前致谢!!
答案 0 :(得分:1)
正如@Viccari在回复中解释的那样,您不应该提供有关安全性的“自定义”解决方案。最好的方法是将Cognito SDK集成到客户端代码中。它将处理有关您的令牌的所有内容。另外,如果您的应用程序使用AWS API Gateway,则可以将API配置为使用Cognito Authorizer。无论如何,如果你真的需要自定义身份验证,我建议使用Developer Authenticated Identities,它提供了一种机制,允许您在与Cognito集成时对用户进行身份验证。
致以最诚挚的问候,
答案 1 :(得分:-1)
我认为您应该在客户端上集成Cognito,即使您明确指出了以下内容:
我不想直接将iOS / Andorid / Web与AWS Cognito集成,因为将来我们可能需要切换到其他提供商。
通过在服务器端汇总处理客户凭据,您正在增加对客户的风险和潜在威胁。这听起来不像是您应用程序的核心业务。这是Cognito的核心业务。
在我看来,在客户端与Cognito集成可以解决所有问题。我只是不确定是否会重新获取用户元数据(例如电子邮件地址),但无论如何,只有那个在你自己身上而不是一切都可以。
此外,即使您将来需要切换身份提供商,Cognito也会支持多个(Google,Facebook,亚马逊),甚至是自定义提供商。如果您真的需要它。