我应该在Amazon Cognito中使用托管登录还是创建自定义UI?
Amazon Cognito是为Web和移动应用程序提供身份验证、授权和用户管理服务。您的用户可以通过多种不同的身份验证方法直接登录,例如通过Amazon Cognito中的用户帐户或通过社交提供商(如Facebook、Amazon、Apple或Google)。您还可以通过第三方OpenID Connect(OIDC)或SAML 2.0身份提供商(IdP)配置联合身份验证。
Amazon Cognito用户池是为应用程序用户提供注册和登录功能的用户目录,包括联合身份验证功能。Cognito用户池有两个主要的UI选项:
- 托管登录:AWS托管、预配置、维护和扩展UI——包括托管登录品牌和经典托管UI品牌——提供一组可自定义或配置的选项,用于应用程序用户的注册和登录。
- 自定义UI:您可以使用SDK配置具有完全自定义UI的Amazon Cognito用户池。根据AWS责任共担模型,您需要负责托管、配置、维护和扩展自定义UI。
在这篇博客文章中,我们回顾了使用托管登录或使用SDK创建自定义UI的优势,以及在确定应用程序选择哪种方案时需要考虑的事项。
托管登录
托管登录为您的用户池提供注册、登录、多因素认证(MFA)、密码管理以及无密码和通行密钥登录功能的Web界面。托管登录提供基于OAuth 2.0规范的授权服务器,并具有注册和登录用户流程的默认实现。您的应用程序可以重定向到托管登录,托管登录将通过授权码授权流程处理用户流程。托管登录还支持通过社交提供商登录以及从OIDC兼容和SAML 2.0提供商的联合身份验证。Amazon Cognito提供两种视觉模式和品牌定制体验:带有品牌编辑器的托管登录品牌和托管UI(经典)品牌。
带有品牌编辑器的托管登录品牌 托管登录品牌提供改进的用户体验,具有最新的用户池UI体验身份验证选项。图1显示了使用默认品牌设置的托管登录。
图1:托管登录默认品牌设置
品牌编辑器是一个无代码可视化编辑器,您可以使用它来自定义整个用户旅程的外观和感觉。您可以单独自定义每个用户池应用程序客户端,并使用不同的屏幕尺寸实时预览屏幕,如图2所示。
图2:Amazon Cognito品牌编辑器中的自定义(图片来源)
如图3所示,您可以使用品牌编辑器自定义各种组件,包括背景、页眉和页脚、按钮、焦点状态、图标等。
图3:各种组件自定义选项
此外,托管登录品牌增加了对使用通行密钥、电子邮件一次性密码(OTP)和短信OTP进行无密码登录的支持,如图4所示。在用户池中启用无密码登录后,托管登录品牌会适应经过精心设计的用户流程,支持用户偏好的身份验证方法。
图4:使用通行密钥登录流程(左)和用户选择的登录方法流程(右)
托管登录品牌还提供多种语言的本地化选项(图5显示了两种)。您可以在分发给用户的链接中添加lang查询参数,Amazon Cognito将在初始请求后在用户浏览器中设置包含其语言偏好的cookie。
图5:日语的Cognito用户注册页面(左)和简体中文的用户登录页面(右)
托管UI(经典)品牌 对于偏好传统方法的客户,Amazon Cognito继续支持托管UI(经典)品牌(如图6所示),并提供基本自定义功能,您可以上传CSS文件来设计UI样式并上传特定品牌的徽标。托管UI(经典)支持带有MFA和自助注册的标准身份验证流程。
图6:托管UI(经典)品牌
带有品牌编辑器的托管登录品牌适用于具有Essentials和Plus功能层的Amazon Cognito用户池,而托管UI(经典)品牌适用于大多数Cognito用户池,包括Lite层。要了解有关Cognito功能层的更多信息,请访问Amazon Cognito定价。
安全与合规能力 托管登录品牌和托管UI(经典)品牌都旨在帮助您满足合规性和安全要求以及用户需求。托管登录支持自定义OAuth范围和OAuth 2.0流程。如果您需要单点登录(SSO),可以使用托管登录来支持跨多个应用程序客户端的单一登录,并为同一域使用浏览器会话cookie。操作会记录在AWS CloudTrail中,您可以使用这些日志进行审计和反应式自动化。托管登录体验还支持Amazon Cognito的完整威胁防护功能套件。为了提供额外保护,托管登录支持AWS WAF Web ACL和AWS WAF CAPTCHA,这有助于保护您的Cognito用户池免受基于Web的攻击和不需要的机器人侵扰。
图7:启用了多个登录提供商的默认托管登录示例
对于联合身份验证,托管登录支持与支持OIDC和SAML 2.0的第三方IdP以及社交IdP的联合身份验证,如图7所示。身份提供商连接到您的Amazon Cognito用户池。在托管登录中,用户使用按钮选择联合身份验证源,重定向是自动的。对于SAML和OIDC IdP,您还可以使用用户电子邮件地址中的域来配置映射。在这种情况下,应用程序用户可见的只有一个文本字段用于输入电子邮件地址,如图8所示,并且查找和重定向到相应的SAML IdP是自动的,如选择SAML身份提供商名称中所述。
图8:通过电子邮件域链接到企业IdP的托管登录
托管登录与应用程序负载均衡器(ALB)集成用于Web应用程序,并与AWS Amplify配合使用以启用社交身份提供商和企业联合身份验证(SAML和OIDC)功能。除了这些集成之外,Amazon Cognito用户池还与各种需要用户身份验证和授权的AWS服务(例如AWS AppSync)集成,并通过Cognito授权器与Amazon API Gateway集成以保护您的REST和HTTP端点。
您可能出于多种原因选择使用托管登录。AWS全面管理托管登录的托管、维护和扩展,这有助于客户加快上市速度。如果您的应用程序需要OAuth 2.0自定义范围、联合身份验证、社交登录或具有基本但定制品牌的本机用户以及可能众多的Amazon Cognito用户池,您可能会受益于使用托管登录。
有关如何配置和使用托管UI的更多信息,请参阅使用Amazon Cognito托管UI进行注册和登录。
创建自定义UI
使用Amazon Cognito的SDK创建自定义UI提供了许多好处和功能,可以帮助您完全自定义应用程序用户的UI。通过自定义UI,您可以完全控制应用程序用户将登陆的UI的外观和感觉,包括设计支持多种语言的应用程序,并且可以构建和设计自定义身份验证流程。
构建自定义UI时支持许多功能。与托管登录一样,从使用SDK的自定义UI调用的API将在CloudTrail中创建日志条目,您可以使用这些日志进行审计和自动化。您还可以为用户创建自定义身份验证流程,提供完全自定义的身份验证体验,超越托管登录中可用的体验。
在自定义UI中,您可以构建自定义会话管理并与AWS WAF集成。自定义UI还可以与Amazon Cognito的威胁防护功能配合使用。
图9:自定义用户界面示例
通过自定义UI,例如图10中所示的UI,您可以为用户编排一套登录选项和登录流程。例如,您可以在身份验证流程开始时收集用户或租户标识符,并应用您自己的用户身份验证流程逻辑,例如将联合用户重定向到外部IdP,为本地用户显示密码提示,或者如果用户不存在则引导他们创建新帐户。您还可以构建流程,让用户在偏好的选择不可用时选择替代的MFA方法。
图10:自定义UI示例
当您构建自定义UI时,支持自定义端点和代理,因此您在管理与身份验证相关的应用程序开发方面拥有更广泛的管理和一致性选项。自定义身份验证流程仅在具有自定义UI的应用程序中可用,这使您能够制作自定义的挑战提示和答案,通过使用AWS Lambda触发器帮助您满足自定义安全要求。例如,您可以使用它来实现OAuth 2.0设备授权流程。最后,自定义UI支持记住设备功能,您可以在其中添加来自受信任设备的低工作量登录。
当完全自定义是必需时,或者当您希望使用自定义身份验证挑战Lambda触发器合并自定义身份验证流程时,您可能会选择使用SDK构建自定义UI。如果您不需要使用OAuth 2.0流程,并且有资源为应用程序用户开发和实施独特的UI,那么自定义UI是一个很好的选择。
有关如何配置和使用自定义UI的更多信息,请参阅使用Amazon Cognito托管登录进行注册和登录。您还可以访问有关使用Amplify构建自定义UI的文档。
决策标准矩阵
在决定使用Amazon Cognito托管登录品牌选项还是自定义UI时,存在一些独特的差异,可以帮助您确定哪种UI最适合您的应用程序需求。托管登录提供现代、可定制的身份验证体验,具有高级功能,如无代码可视化定制、深色模式主题以及对无密码选项的支持。它支持OAuth 2.0流程、自定义OAuth范围、一次登录并访问许多Cognito应用程序客户端(使用SSO)的能力,以及完全使用Cognito威胁防护功能。对于需要完全控制身份验证体验和UX的应用程序——包括自定义身份验证流程、设备指纹识别和减少令牌过期时间——自定义UI是更好的选择。此选项允许完全UI定制、实施自定义身份验证流程以及与托管登录不支持的特定框架或库的集成。
在做出决定时,请考虑所需的自定义级别、特定的身份验证功能需求、可用的开发资源、与其他AWS服务的集成要求、安全性和合规性需求以及用户体验优先级。请记住,您的应用程序身份验证要求和客户体验应优先于其他考虑因素。您可以使用下表来帮助选择最适合您需求的UI。
| 需求 | 托管登录 | 托管UI(经典) | 自定义UI(SDK) |
|---|---|---|---|
| OAuth 2.0 流程 | 支持 | 支持 | 不可用 |
| 自定义 OAuth 范围 | 支持 | 支持 | 支持 |
| UI 自定义 | 无代码品牌设计器 | 有限的 CSS 自定义 | 完全自定义控制 |
| 自定义用户输入表单 | 不可用 | 不可用 | 支持 |
| 自定义身份验证流程 | 不可用 | 不可用 | 支持 |
| 无密码身份验证流程 | 支持 | 不可用 | 支持自定义实现 |
| 多语言本地化 | 支持 | 不可用 | 支持 |
| 一次登录跨多个应用客户端 | 支持 | 支持 | 不可用 |
| 可配置会话过期时间低于1小时 | 不可用 | 不可用 | 支持 |
| 可信设备身份验证 | 不可用 | 不可用 | 支持 |
| AWS WAF 集成 | 支持 | 支持 | 支持 |
| 支持 AWS WAF CAPTCHA | 支持 | 支持 | 不可用 |
| 使用自定义端点或代理的能力 | 不可用 | 不可用 | 支持 |
| AWS 应用程序负载均衡器集成 | 支持 | 支持 | 不可用 |
图11:决策标准矩阵
结论
在这篇文章中,您了解了使用托管登录(包括其两个品牌选项)以及在Amazon Cognito中创建自定义UI的许多支持功能和优势。每个UI选项都针对特定需求。根据您的身份验证以及用户注册和登录体验的需求列表,从可用选项中进行选择。您可以将本文中的信息作为参考,以便在将Amazon Cognito添加到移动和Web应用程序进行身份验证时使用。