APP认证系统:Amazon Cognito最佳实践

Amazon Cognito是APP的认证系统,你可以通过集成Amazon Cognito到你的APP中,从而快速实现APP的注册和登录功能。Amazon Cognito提供了一个可扩展到数百万用户的身份存储,支持社交平台的身份联合和企业身份联合,并提供先进的安全功能来保护您的消费者和业务。Amazon Cognito建立在开放的身份标准之上,支持各种合规法规,并与前端和后端开发资源整合。

想象一下,您正在创建一个访问 AWS 资源的移动APP,例如一个在移动设备上运行的游戏,并使用 Amazon S3 和 DynamoDB 存储玩家和得分信息。

在编写此类应用程序时,您会向 AWS 服务发出请求,这些请求必须使用 AWS 访问密钥签名。但是,我们强烈建议您不要在设备的应用程序中嵌入或分发长期 AWS 凭据,即使是做了加密存储也是如此。相反,在构建APP时,应使其在需要时,使用网络身份联合动态请求临时 AWS 安全凭据。提供的临时凭据映射到 AWS 角色,该角色只拥有执行移动应用程序所需任务的权限。

有了网络身份联合,你就不需要创建自定义登录代码或管理自己的用户身份。相反,您应用程序的用户可以使用知名的外部身份提供商(IdP)登录,如登录亚马逊、Facebook、谷歌或任何其他兼容 OpenID Connect (OIDC) 的 IdP。他们可以收到一个身份验证令牌,然后将该令牌交换为 AWS 中的临时安全凭证,该凭证映射到具有使用 AWS 账户中资源权限的 IAM 角色。使用 IdP 可以帮助您保证 AWS 账户的安全,因为您不必在应用程序中嵌入和分发长期安全凭证。

在大多数情况下,我们建议您使用 Amazon Cognito,因为它可以充当身份代理,为您完成大部分联合工作。有关详情,请参阅下一节 "在移动应用程序中使用 Amazon Cognito"。

如果不使用 Amazon Cognito,则必须编写与 Facebook 等网络 IdP 交互的代码,然后调用 AssumeRoleWithWebIdentity API,将从这些 IdP 获取的身份验证令牌换成 AWS 临时安全凭证。如果您已经在现有应用程序中使用了这种方法,则可以继续使用。

1# 结合ALB认证用户

文档地址:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#cognito-requirements

假设你开发了一个web应用,你的用户需要从公网访问,并且应用还未开发身份认证体系。此时,可以通过将应用部署在ALB后面,通过使用Amazon Cognito作为ALB的认证。以便您可以专注于应用程序的业务逻辑,而不是系统认证的开发。Amazon Cognito支持以下认证方式:

  • OpenID Connect(OIDC)的身份提供者(IdP)认证用户。

  • 亚马逊Cognito支持的用户池,通过亚马逊、Facebook或谷歌等社交IdP认证用户。

  • 企业身份认证用户,使用SAML、LDAP或Microsoft AD,通过Amazon Cognito支持的用户池。

参考资料

[blog] Implement step-up authentication with Amazon Cognito, Part 1: Solution overview

[blog] Implement step-up authentication with Amazon Cognito, Part 2: Deploy and test the solution

[blog] How to configure Duo multi-factor authentication with Amazon Cognito

[blog]Simplify web app authentication: A guide to AD FS federation with Amazon Cognito user pools

[github] How to implement Step-up Authentication using Amazon Cognito

[github] Amazon Cognito Passwordless Auth

最后更新于