AWS Cognito 密码正则表达式 - 特定于 AWS Cognito

问题描述 投票:0回答:3

有人可以给我正则表达式来匹配有效的 AWS Cognito 密码 - 包含数字、特殊字符(其列表)、小写和大写字母

AWS Cognito 默认长度限制为 6 个字符,并且有自己的特殊字符列表

请注意,AWS Congito 密码正则表达式特定于 AWS Congnito - 而不仅仅是通用密码正则表达式。

regex amazon-web-services oauth passwords amazon-cognito
3个回答
55
投票

更新答案 - 2023 年 3 月


/^(?!\s+)(?!.*\s+$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[$^*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ])[A-Za-z0-9$^*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ]{8,256}$/

说明

  • /
    表示正则表达式的开始。
  • ^
    开始。匹配字符串的开头。
  • (?!\s+)
    不允许出现前导空格。
  • (?!.*\s+$)
    不允许尾随空格。
  • (?=.*[a-z])
    需要小写字母。
  • (?=.*[A-Z])
    需要大写字母。
  • (?=.*[0-9])
    需要数字。
  • (?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ])
    需要指定集中至少一个特殊字符。 (非前导、非尾随空格字符也被视为特殊字符。)
  • [A-Za-z0-9^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+\- ]{8,256}
    允许的字符集中最少 8 个字符,最多 256 个字符。
  • $
    结束。匹配字符串的结尾。
  • /
    表示正则表达式的结束。

最小字符限制默认为 8,但可以自定义为 6 到 99 之间的值。但是,密码的完整长度限制为 256 个字符(而不是 99)。

互动示例

https://regexr.com/79p07

文档

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-policies.html

文档中的不准确之处

Cognito 在默认密码要求中也有“无前导或尾随空格”规则,但有几个文档错误地指出“空格字符也被视为特殊字符”。然而,当前的行为实际上是“非前导、非尾随空格字符也被视为特殊字符”。

要查看正确的默认密码规则,请查看用户池,单击“登录体验”选项卡,然后单击“包含至少 1 个特殊字符”以显示包含规则的工具提示。


1
投票

Swift 5 的正则表达式公式是

"(.*[()!@^$*.?\\-@#%&\":;|><'_~`+=\\[\\],{}])"

0
投票

这些是基于 AWS 控制台设置和当前 Cognito 文档的默认要求:

  • 无前导或尾随空格
  • 至少一个大写基本拉丁字母
  • 至少一个小写基本拉丁字母
  • 至少一个阿拉伯数字 1
  • 至少其中一项: ^$*。 [ ] { } ( ) ? - “!@#%&/\,>< ' : ; | _ ~ ` + =
  • 8-256 个字符
  • 除了前导空格和尾随空格之外,允许使用任何字符,包括空格和表情符号 2

1 文档中没有指定对阿拉伯数字的限制,但我实验发现其他 Unicode 数字不计入此要求

2 接受的答案将允许的字符限制为“必需”的字符,但是允许的字符数多于所需的字符数。 Cognito 文档 表示:“Amazon Cognito 验证密码包含所需的最少字符后,您的用户密码可以包含 任何类型的其他字符,最多可达最大密码长度。” Cognito 对以下密码非常满意,例如:Ab!~1 🤢℉”•—”†„简体字

这个正则表达式可以处理上述所有场景:

/^(?!\s+)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+-]).{8,256}(?<!\s)$/

说明:

    ^(?!\s+)
  • 没有前导空格
  • (?=.*[A-Z])
  • 至少一个大写字母
  • (?=.*[a-z])
  • 至少一个小写字母
  • (?=.*[0-9])
  • 至少一位数字
  • (?=.*[\^$*.[\]{}()?"!@#%&/\\,><':;|_~`=+-])
  • 至少其中一项:^ $ * 。 [ ] { } ( ) ? - " !@ # % & / \ , >
    Cognito 文档
    )< ' : ; | _ ~ ` + = (listed in the same order as in the
  • .
  • 除了前导空格和尾随空格之外,允许使用任何字符, 包括空格和表情符号
    ```{8,256}`` 8-256 个字符
  • (?<!\s)$
  • 没有尾随空格
    
        
© www.soinside.com 2019 - 2024. All rights reserved.