-
Notifications
You must be signed in to change notification settings - Fork 2
feat(passkeys): Support password manager browser extensions #699
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
base: main
Are you sure you want to change the base?
Conversation
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.OpenSSF ScorecardScorecard details
Scanned Files
|
24597b7 to
5422819
Compare
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.
Pull Request Overview
This PR enables passkeys to work with password manager browser extensions by adding support for autofill UI dialogs and handling encoding differences between password managers and the WebAuthn specification. The key changes include adding base64url normalization functions, improved error handling for credential operations, and support for both modal and autofill authentication flows.
Key changes:
- Added base64url encoding normalization to handle password managers that use standard base64 encoding
- Enhanced error handling for WebAuthn credential operations with granular AbortError and NotAllowedError handling
- Refactored authentication flow to support both native modal dialogs and password manager autofill UI
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
tjsilver
left a comment
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.
I could not test as I was unable to add a passkey to Lastpass for Janus on Firefox. When I tried on prod Janus, adding the passkey to Lastpass extension was successful, but on Janus I got the toast error 'invalid passkey field'. I am also unable to get to the local janus running this branch with the error: Could not resolve substitution to a value: ${PASSKEY_MANAGER_CONTACT_LINK}. So I think I'm caught in a situation where I can't register a passkey, but also can't proceed without one on this branch.
What is the purpose of this change?
This change enables passkeys to be authenticated by and stored in password managers, as well as the native options provided by the OS and the browser currently.
Conditions for changed experience
The changed experience
At registration and authentication time, an autofill UI dialog provided by the password manager appears top right instead of the native modal dialog. (If multiple password managers are installed, a dialog supplied by one of them opens. I'm not sure what the rules of precedence are here.)
What is the value of this change and how do we measure success?
Users can be provided with an org-managed password manager extension to make it easier to provide passkeys.
Caution
Not all password managers respect the user verification options of the WebAuthn spec without further configuration. Even though the authentication response they send to the server for verification claims that user verification took place.
To Test
There are many scenarios but these are the important ones: