本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
密码、密码恢复和密码策略
所有登录用户池的用户(即使是联合用户)都为其用户配置文件分配了密码。本地用户和关联用户在登录时必须提供密码。联邦用户不使用用户池密码,而是使用其身份提供商 (IdP) 登录。您可以允许用户以管理员身份重置自己的密码、重置或更改密码,以及为密码复杂性和历史设置策略。
Amazon Cognito 不以明文形式存储用户密码。取而代之的是,它使用用户特定的盐存储每个用户密码的哈希值。因此,您无法从用户池中的用户配置文件中检索现有密码。最佳做法是,不要在任何地方存储纯文本用户密码。当用户忘记密码时,执行密码重置。
密码重置和恢复
用户忘记了自己的密码。你可能希望他们能够自己重置密码,或者你可能想要求管理员为他们重置密码。Amazon Cognito 用户池有两种型号的选项。本指南的这一部分介绍用户池设置和密码重置API操作。
ForgotPasswordAPI操作和托管用户界面选项忘记密码了吗? 向用户发送验证码,当他们确认自己拥有正确的密码时,他们就有机会设置新密码ConfirmForgotPassword。这是自助式密码恢复模式。
AdminSetUserPassword和AdminResetUserPasswordAPI操作是管理员启动的密码重置方法。 AdminSetUserPassword
设置临时或永久密码,并以与相同的方式AdminResetUserPassword
向用户发送密码重置代码。ForgotPassword
AccountRecoverySetting
参数是用户池参数,用于设置用户在调用时可以用来恢复密码的方法ForgotPassword
API。 ForgotPassword
向经过验证的电子邮件或经过验证的电话号码发送恢复码。恢复代码的有效期为 1 小时。当您为用户池指定 AccountRecoverySetting
时,Amazon Cognito 会根据您设置的优先级选择代码发送目标。
当您定义AccountRecoverySetting
并SMSMFA配置用户后,SMS不能用作帐户恢复机制。此设置的优先级已确定,其中 1 为最高优先级。Cognito 仅向指定方法之一发送验证。
例如,当管理员不希望用户自行恢复账户时,可以使用值 admin_only
,这会改为要求用户联系管理员来重置账户。您不能将 admin_only
与任何其他帐户恢复机制一起使用。
如果您未指定 AccountRecoverySetting
,Amazon Cognito 会使用旧机制来确定恢复密码的方法。在这种情况下,Cognito 首先使用经验证手机。如果找不到用户的经验证手机,Cognito 会退回,接下来使用经验证电子邮件地址。
有关更多信息AccountRecoverySetting
,请参阅 Amazon Cognito 身份提供商API参考UpdateUserPool中的CreateUserPool和。
忘记密码行为
在给定时间内,作为忘记密码和操作的一部分,我们允许用户尝试请求或输入密码重置码 5 到 20 次。 confirm-forgot-password 确切的值取决于与请求关联的风险参数。请注意,这种行为可能会发生变化。
添加用户池密码要求
强大、复杂的密码是用户群的最佳安全实践。特别是在对互联网开放的应用程序中,弱密码会将用户的凭据暴露给猜测密码并尝试访问您的数据的系统。密码越复杂,就越难猜出。Amazon Cognito 为注重安全的管理员提供了其他工具,例如高级安全功能和AWS WAF 网络 ACLs,但是您的密码策略是用户目录安全的核心要素。
Amazon Cognito 用户池中本地用户的密码不会自动过期。最佳做法是在外部系统中记录用户密码重置的时间、日期和元数据。使用密码使用期限的外部日志,您的应用程序或 Lambda 触发器可以查找用户的密码年限,并在给定时间后要求重置。
您可以将用户池配置为要求符合安全标准的最低密码复杂性。复杂密码的最小长度至少为八个字符。它们还包括大写、数字和特殊字符的组合。
借助高级安全功能,您还可以设置密码重复使用策略。您可以阻止用户将其密码重置为与其当前密码相匹配的新密码或最多 23 个以前的其他密码中的任何一个,总共最多为 24 个。
设置用户池密码策略
-
创建一个用户池并导航到配置安全要求步骤,或访问现有用户池并导航到登录体验选项卡。
-
导航到密码策略。
-
选择密码策略模式。Cognito 默认使用推荐的最低设置来配置您的用户池。您也可以选择一项自定义密码策略。
-
设置密码最小长度。所有用户都必须使用长度大于或等于这个值的密码进行注册或创建。您可以将这个最小值设置为 99,但用户可以设置最长 256 个字符的密码。
-
在密码要求下配置密码的复杂性规则。选择您希望在每个用户的密码中至少包含一个的字符类型(数字、特殊字符、大写字母和小写字母)。
密码中可以要求至少包含以下字符之一。在 Amazon Cognito 验证密码中包含所需的最少字符后,您的用户的密码可以包含任何类型的额外字符,但不得超过最大密码长度。
-
大写和小写基本拉丁
字母 -
数字
-
以下特殊字符。
^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` = + -
-
非前导、非结尾的空格字符。
-
-
为管理员设置的临时密码到期时间设置一个值。超过此期限,您通过 Amazon Cognito 控制台或
AdminCreateUser
创建的新用户将无法登录和设置新密码。使用临时密码登录后,他们的用户账户永远不会过期。要更新 Amazon Cognito 用户池中的密码时长API,请在您的CreateUserPool或UpdateUserPoolAPI请求TemporaryPasswordValidityDays 中为设置一个值。 -
为防止使用以前的密码设置一个值(如果有)。要使用此功能,请在用户池中激活高级安全功能。此参数的值是用户重置密码时阻止新密码匹配的先前密码的数量。
要重置已过期用户帐户的访问权限,请执行以下任一操作:
-
删除用户配置文件并创建新的用户配置文件。
-
在AdminSetUserPasswordAPI请求中设置新的永久密码。
-
在AdminResetUserPasswordAPI请求中生成新的确认码。