-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(cognito): choice-based authentication (passwordless sign-in / passkey sign-in) #32369
Conversation
This comment was marked as resolved.
This comment was marked as resolved.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #32369 +/- ##
=======================================
Coverage 81.00% 81.00%
=======================================
Files 238 238
Lines 14269 14269
Branches 2492 2492
=======================================
Hits 11558 11558
Misses 2425 2425
Partials 286 286
Flags with carried forward coverage won't be shown. Click here to find out more.
|
0d5449e
to
53ffbfb
Compare
### Issue # (if applicable) N/A ### Reason for this change Amazon Cognito introduces the feature plans which replaces the Advanced Security Mode. See: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-sign-in-feature-plans.html Related to #32369 - passwordless sign-in requires Essentials or higher feature plan. ### Description of changes - Add new `featurePlan` property and `FeaturePlan` enum to specify user pool feature plan. - Deprecate `advancedSecurityMode` property and `AdvancedSecurityMode` enum. Note that the previous AWS document about Advanced Security Mode is now redirected to [Advanced security with threat protection](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html). ### Description of how you validated changes Added new unit tests and an integ test. ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 Sorry for the super-late review
@lpizzinidev Thank you for your comments! I've pushed some modifications. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My idea was to enforce password: true
regardless when setting allowedFirstAuthFactors
. Please let me know what's your thought 👍
/* | ||
* Choice-based authentication is enabled when built allowedFirstAuthFactors contains any factor but PASSWORD. | ||
* This check should be placed here to supply the way to disable choice-based authentication explicitly | ||
* by specifying `allowedFirstAuthFactors: { password: true }`. | ||
*/ | ||
const isChouseBasedAuthenticationEnabled = allowedFirstAuthFactors.some((auth) => auth !== 'PASSWORD'); | ||
if (isChouseBasedAuthenticationEnabled && props.featurePlan === FeaturePlan.LITE) { | ||
throw new ValidationError('To enable choice-based authentication, set `featurePlan` to `FeaturePlan.ESSENTIALS` or `FeaturePlan.PLUS`.', this); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/* | |
* Choice-based authentication is enabled when built allowedFirstAuthFactors contains any factor but PASSWORD. | |
* This check should be placed here to supply the way to disable choice-based authentication explicitly | |
* by specifying `allowedFirstAuthFactors: { password: true }`. | |
*/ | |
const isChouseBasedAuthenticationEnabled = allowedFirstAuthFactors.some((auth) => auth !== 'PASSWORD'); | |
if (isChouseBasedAuthenticationEnabled && props.featurePlan === FeaturePlan.LITE) { | |
throw new ValidationError('To enable choice-based authentication, set `featurePlan` to `FeaturePlan.ESSENTIALS` or `FeaturePlan.PLUS`.', this); | |
if (props.featurePlan === FeaturePlan.LITE) { | |
throw new ValidationError('To enable choice-based authentication, set `featurePlan` to `FeaturePlan.ESSENTIALS` or `FeaturePlan.PLUS`.', this); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
allowedFirstAuthFactors: { password: true }
must allow Lite feature plan.
When the user have a user pool with choice-based authentication enabled and want to downgrade to Lite feature plan, the user must specify allowedFirstAuthFactors: { password: true }
to disable choice-based authentication explicitly.
see #32369 (comment)
@lpizzinidev Thank you for explanation. I misunderstood. When Cognito supports to disable password authentication in the future, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Appreciate the contribution! Thank you.
Left some comments on the design of the construct props.
@samson-keung Than you for your review. I'm working on your suggestions. |
Responded within the threads. Sorry I wasn't able to get to them quicker as I am in the PDT time zone. Updated my profile to reflect that :) |
Co-authored-by: Samson Keung <keungsi@amazon.com>
Pull request has been modified.
@samson-keung I pushed updates. Time zone is not an issue. Thank you! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thank you for adding this feature!
Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
Comments on closed issues and PRs are hard for our team to see. |
Issue # (if applicable)
Closes #32265.
Reason for this change
User Pool has introduced choice-based authentication, including passwordless sign-in and passkey (WebAuthn) sign-in.
For details, see Manage authentication methods in AWS SDKs.
Related PRs:
Description of changes
Added following properties:
allowedFirstAuthFactors
- allowed first authenticate factorspasskeyRelyingPartyId
- the authentication domain used as passkey relying party IDpasskeyUserVerification
- configure user verification to be preferred or requiredDescription of how you validated changes
Added unit test and an integ test.
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license