Skip to content

Commit

Permalink
Cleaned up logging across the solution. Removed references to SVPIN, …
Browse files Browse the repository at this point in the history
…and transitioned to u2f password. Consolidated more UI/Alert strings into internationalization
  • Loading branch information
csalas-yubico committed Apr 8, 2022
1 parent 2a813b1 commit 70593fd
Show file tree
Hide file tree
Showing 24 changed files with 1,200 additions and 447 deletions.
61 changes: 32 additions & 29 deletions NEWS
Original file line number Diff line number Diff line change
@@ -1,63 +1,66 @@
== Version 2.0.0 RC ==

- Updated look and feel of UI
- Attestation data now displayed to the user (if they are using a YubiKey)
- Added prompts to guide users when registering a Platform Authenticator
- Changed SV-PIN to U2F Password
- Code changes to include better error handling, linting, and migrated to TypeScript

== Version 1.0.0 ==

GA release

* Added Docker deployment
* Apache License 2.0
- Added Docker deployment
- Apache License 2.0

== Version 0.0.6 ==

Beta release

* Speed up recovery code generation and validation
* Internal variable naming standardization and cleanup
* Configure URL redirects for SPA

- Speed up recovery code generation and validation
- Internal variable naming standardization and cleanup
- Configure URL redirects for SPA

== Version 0.0.5 ==

Beta release

* Initial iOS app commit
* Code cleanup (remove magic numbers, internal variable naming, etc.)
* Update dependencies
* Add more sanity checks to scripts

- Initial iOS app commit
- Code cleanup (remove magic numbers, internal variable naming, etc.)
- Update dependencies
- Add more sanity checks to scripts

== Version 0.0.4 ==

Beta release

* Fixed cascading delete bug
* Updated packages/dependencies and removed unused packages/dependencies
* Added recovery code and SV-PIN validation, max attempts, and hashing
* Deployment script bugfixes

- Fixed cascading delete bug
- Updated packages/dependencies and removed unused packages/dependencies
- Added recovery code and SV-PIN validation, max attempts, and hashing
- Deployment script bugfixes

== Version 0.0.3 ==

Beta release

* Added release notes & license

- Added release notes & license

== Version 0.0.2 ==

Beta release

* Client-Side Discoverable Credential, a.k.a. Usernameless, WebAuthn credential registration and authentication
* Improved error handling
* Delete user account feature
* Scripted deployment of backend and frontend

- Client-Side Discoverable Credential, a.k.a. Usernameless, WebAuthn credential registration and authentication
- Improved error handling
- Delete user account feature
- Scripted deployment of backend and frontend

== Version 0.0.1 ==

Alpha release

* AWS Cognito Custom Auth identifier-first WebAuthn registration and login flow
* WebAuthn lifecycle management (add/edit/remove WebAuthn credentials)
* Server-Verified PIN feature for authenticators without user verification capability
* Account recovery backup codes
* AWS SAM backend deployment based on CloudFormation template
* AWS Amplify hosted react web app
- AWS Cognito Custom Auth identifier-first WebAuthn registration and login flow
- WebAuthn lifecycle management (add/edit/remove WebAuthn credentials)
- Server-Verified PIN feature for authenticators without user verification capability
- Account recovery backup codes
- AWS SAM backend deployment based on CloudFormation template
- AWS Amplify hosted react web app
38 changes: 20 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,67 +1,69 @@
# Yubico WebAuthn Starter Kit

The WebAuthn Starter Kit is an Authentication and Authorization turnkey solution applying the best practices for strong authentication while providing ways to automate deployment of a serverless cloud-first solution that is repeatable, modularized, and scalable.
The WebAuthn Starter Kit is an Authentication and Authorization turnkey solution applying the best practices for strong authentication while providing ways to automate deployment of a serverless cloud-first solution that is repeatable, modularized, and scalable.

![WebAuthn Kit Architecture Diagram](./assets/architectural-diagram.svg)

## How it works 🔧 ##
## How it works 🔧

The starter kit solution utilizes Amazon Cognito User Pools as an identity provider with a custom User Pool Workflow consisting of four AWS Lambda functions, a WebAuthn Lambda function, and an Amazon API Gateway endpoint, providing registration, authentication, and authorization for an identifier-first type flow.
The starter kit solution utilizes Amazon Cognito User Pools as an identity provider with a custom User Pool Workflow consisting of four AWS Lambda functions, a WebAuthn Lambda function, and an Amazon API Gateway endpoint, providing registration, authentication, and authorization for an Adaptive Multi-Factor Authentication with WebAuthn type flow.

## Deliverable 📬 ##
## Deliverable 📬

The solution will be provided as an Amazon SAM template that includes the creation of a Amazon Cognito User Pool, coded AWS Lambda functions, an Amazon Aurora database, an Amazon API Gateway endpoint, and necessary permissions to create, execute, and delete these resources in your own AWS account.

## Documentation ##
## Documentation

Check out our [Yubico WebuAthn Starter Kit Documentation](https://developers.yubico.com/Developer_Program/WebAuthn_Starter_Kit/) for more detailed design, architecture overview, installation guide(s), and documented WebAuthn authentication flows.
Check out our [Yubico WebuAthn Starter Kit Documentation](https://developers.yubico.com/Developer_Program/WebAuthn_Starter_Kit/) for more detailed design, architecture overview, installation guide(s), and documented WebAuthn authentication flows.

## Backend Resources ##
## Backend Resources

These resources will be created, configured, and deployed in your own AWS environment using the provided [SAM template](https://github.com/YubicoLabs/WebAuthnKit/blob/master/backend/template.yaml). These services provide registration, authentication, WebAuthn Relying Party, and OPEN ID Connect provider solutions.

✅ One Amazon Cognito User Pool.
✅ One Amazon Cognito User Pool.

<details><summary>Cognito User Pools as an Identity Provider</summary><p>

## About Cognito User Pools ##
## About Cognito User Pools

Amazon Cognito User Pools is a full-featured user directory managed AWS service that handles user registration, authentication, and account recovery. Amazon Cognito user pools implements ID, Access, and Refresh Tokens as defined by the OpenID Connect (OIDC) open standard.

Note :book: : User Pools provided tokens can be used to obtain temporary AWS credentials—with permissions you define—to access other AWS services directly or resources through Amazon API Gateway using Amazon Cognito Federated Identities (Identity Pool).
Note :book: : User Pools provided tokens can be used to obtain temporary AWS credentials—with permissions you define—to access other AWS services directly or resources through Amazon API Gateway using Amazon Cognito Federated Identities (Identity Pool).

The WebAuthn Starter Kit relies on Cognito User Pools to store user information and handle the custom registration and authentication flow. The kit can be used to leverage Cognito Federated Identities (identity pool) for fine-grain user access to other AWS resources.

</p>
</details>
</p>

Four AWS Lambda Functions used as custom triggers with Cognito User Pool.
✅ Four AWS Lambda Functions used as custom triggers with Cognito User Pool.

One AWS Lambda Function [(Yubico Java WebAuthn Server Library)](https://github.com/Yubico/java-webauthn-server) as the WebAuthn Relying Party.
✅ One AWS Lambda Function [(Yubico Java WebAuthn Server Library)](https://github.com/Yubico/java-webauthn-server) as the WebAuthn Relying Party.

One Amazon RDS Database - Aurora Serverless (MySQL-compatible database used to store user credential attributes).
✅ One Amazon RDS Database - Aurora Serverless (MySQL-compatible database used to store user credential attributes).

One Amazon API Gateway as our RESTful API endpoint.
✅ One Amazon API Gateway as our RESTful API endpoint.

## Backend

Deploy the backend as outlined in [backend](./backend/README.md).

## Clients ##
## Clients

Once you build and deploy the backend, you can use one of the clients below to connect into the backend.

[Web Client (React)](https://github.com/YubicoLabs/WebAuthnKit/tree/master/clients/web/react)

[iOS Client (Swift)](https://github.com/YubicoLabs/WebAuthnKit/tree/master/clients/iOS)

## Cost Considerations ##
## Cost Considerations

We have done our best to reduce the cost of running the Yubico WebAuthn Starter Kit on AWS, however, you are responsible the AWS service fees while running the WebAuthn Starter Kit reference deployment.

The WebAuthn Starter Kit utilizes an AWS SAM template for quick deployment. This template includes configuration parameters that you can customize to fit your needs and budget. Some of these settings, such as RDS Aurora database, affect the cost of deployment. For cost estimates, see the pricing pages for each AWS service used.

Cost Analysis: After you deploy the WebAuthn Starter Kit to your AWS environment, you can create a [AWS Cost and Usage Report](https://docs.aws.amazon.com/cur/latest/userguide/what-is-cur.html) to track costs associated with this deployment. This report will deliver billing metrics (cost estimates based on usage) to an Amazon S3 bucket in your own account.

## License Summary ##
## License Summary

This project is licensed under [Apache License 2.0](https://github.com/YubicoLabs/WebAuthnKit/blob/main/COPYING).
104 changes: 101 additions & 3 deletions clients/web/react/public/i18n/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"plat-auth-loading": "Getting your Trusted Devices!",
"roam-auth-title": "Security Keys",
"roam-auth-loading": "Getting your Security Keys!",
"svpin-title": "U2F Password",
"u2fpassword-title": "U2F Password",
"recovery-code-title": "Recovery Options",
"recovery-code-loading": "Getting your Recovery Codes!",
"sign-out": "Sign Out"
Expand Down Expand Up @@ -107,7 +107,15 @@
"handle-webkit": {
"button": "Complete your registration",
"button-loading": "Creating your account",
"close-button": "Cancel"
"close-button": "Cancel",
"pin-error": "PIN Registration Ended - Please attempt to register your security key",
"modal-header-ios": "Select your registration method",
"modal-text-ios": "Click the button below to register with FaceID or your security key",
"modal-platauth-button-ios": "Face ID",
"modal-header-macos": "Select your registration method",
"modal-text-macos": "Click the button below to register your security key",
"modal-platauth-button-macos": "Touch ID",
"modal-default": ""
},
"recovery-codes": {
"header": "Recovery Options",
Expand All @@ -130,7 +138,21 @@
"sv-pin": {
"enter-pin": "Enter U2F Password",
"confirm-pin": "Confirm U2F Password",
"cancel": "Cancel"
"cancel": "Cancel",
"modal-header-create": "Create U2F Password",
"modal-text-create": "Please create a U2F Password",
"modal-submittext-create": "Submit U2F Password",
"modal-buttontext-create": "",
"modal-header-change": "Change your U2F Password",
"modal-text-change": "Enter your new U2F Password information",
"modal-submittext-change": "Change U2F Password",
"modal-buttontext-change": "Change your U2F Password",
"modal-header-dispatch": "U2F Password",
"modal-text-dispatch": "Enter your U2F Password",
"modal-submittext-dispatch": "Submit",
"modal-buttontext-dispatch": "",
"modal-default": "",
"pin-error": "PIN Registration Ended - Please attempt to register your security key"
},
"add-credential-guidance": {
"header": "Register a new Security Key",
Expand Down Expand Up @@ -168,5 +190,81 @@
]
},
"conclusion": "Once you complete these steps, {{PLAT_AUTH}} should be available for use. If you encountered any errors please attempt to re-register your device or contact support"
},
"alerts": {
"registration-successful": "Registration successful",
"delete-successful": "Delete credential successful",
"something-went-wrong": "Something went wrong. Please try again",
"auth-successful": "Authentication successful",
"invalid-rec-code": "Invalid recovery code",
"login-successful": "Login Successful",
"register-account": "Please register an account",
"invalid-server-response": "Invalid server response",
"registration-failed": "Registration failed",
"update-successful": "Update successful"
},
"console": {
"warn": "Warning in {{COMPONENT}} - {{METHOD}}: {{WARNING}}",
"error": "Error in {{COMPONENT}} - {{METHOD}} - {{REASON}}: ",
"info": "{{COMPONENT}} - {{METHOD}} - {{LOG_REASON}}: ",
"reason": {
"signUp0": "Enter Registration",
"signUp1": "Printing userData",
"signUp2": "userData undefined",
"signUp3": "Error registering user",
"signUp4": "Credential created",
"registerKeySuccessStep0": "nickname",
"registerKeySuccessStep1": "localStorage credential",
"registerKeySuccessStep2": "Error updating credential",
"registerTrustedDeviceStep0": "Begin authenticate method",
"registerTrustedDeviceStep1": "userData",
"registerTrustedDeviceStep2": "userData undefined",
"registerTrustedDeviceStep3": "authentication error",
"loginTrustedDevice0": "Beginning usernameless signin",
"loginTrustedDevice1": "WebAuthnStartResponse",
"loginTrustedDevice2": "publicKey response",
"loginTrustedDevice3": "assertionResponse",
"loginTrustedDevice4": "found username",
"loginTrustedDevice5": "Sending custom challenge answer",
"loginTrustedDevice6": "sendCustomChallengeAnswer error",
"loginTrustedDevice7": "SignIn error",
"loginStep0": "Attempting to sign in user",
"loginStep1": "userData",
"loginStep2": "userData undefined",
"loginStep3": "Successful credential",
"loginStep4": "Error",
"loginStep5": "Beginning usernameless login",
"initUserStep0": "Error identifying Platform Authenticator",
"forgotStep0": "CognitoUser",
"forgotStep1": "Error getting current session",
"forgotStep2": "Error getting current session",
"forgotStep3": "Recovery code error",
"addTrustedDevice0": "Error registering new credential",
"handlewebkit0": "Showing modal",
"handlewebkit1": "PublicKey",
"handlewebkit2": "Error registering user",
"handlewebkit3": "Configuring Props and Showing Modal",
"deleteUser0": "Error deleting user",
"addCredential0": "Error creating new Security Key",
"webauthnClient0": "Error",
"webauthnClient1": "username exists",
"webauthnClient2": "response",
"webauthnClient3": "publicKey",
"webauthnClient4": "assertionResponse",
"webauthnClient5": "userhandle",
"webauthnClient6": "challengeResponse",
"webauthnClient7": "cognitoChallenge",
"webauthnClient8": "request",
"webauthnClient9": "begin usernameless flow",
"webauthnClient10": "begin username flow",
"webauthnClient11": "cognitoUser",
"webauthnClient12": "isUserVerified",
"webauthnClient13": "Begin sign up for",
"webauthnClient14": "Username found, will attempt to register user",
"webauthnClient15": "userData",
"webauthnClient16": "Creating new credential",
"webauthnClient17": "startRegistrationResponse",
"webauthnClient18": "makeCredentialResponse"
}
}
}
Loading

0 comments on commit 70593fd

Please sign in to comment.