Skip to content

Enable passkey support in browser for internal builds #6550

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

Merged
merged 1 commit into from
Aug 13, 2025

Conversation

CDRussell
Copy link
Member

@CDRussell CDRussell commented Aug 8, 2025

Task/Issue URL: https://app.asana.com/1/137249556945/project/1203822806345703/task/1211006058270758?focus=true

Description

Enables passkey support for internal builds.

  • Currently the browser reports to websites that passkeys are unavailable
  • With this change, we add support for passkeys that can be used to log in and register on websites. We do not store passkeys in our app, but instead allow integration with the system's passkey provider (Google Password Manager, Samsung Pass etc...)

It's internal only to give us some time to see if it brings issues, get internal feedback etc...

ℹ️ Passkey support depends on which certificate is used to sign the app. As a browser we have been granted a special exemption for using APIs around origin but that relies on certificate hash matches. As such, to test this out in development you will need to Set up debug code signing to use whitelisted certificate

Steps to test this PR

  • Ensure you are testing on an up-to-date version of WebView and Android API.
  • If using an emulator, for best results use one with Google Play installed.

Verify browser shows as supported

Verify you can create a new passkey

  • Enter username (e.g., chicken) and tap Register; verify you are prompted to create a passkey.
  • do it. (you might be prompted to set up device password if not already set up)
  • Verify you see a success message. Tap the Try it again button to return.

Verify you can login when username already selected

  • Ensure your username is still filled in (e.g., chicken) and tap the Authenticate button
  • Verify you see the You're logged in page. Tap the Try it again button to return

Create a 2nd passkey for this website

  • Enter another username (e.g., horse) and tap Register button. Accept the prompt to create a new passkey.
  • Clear out the username field so it's empty
  • Tap on Authenticate button and verify you see a list of passkeys and that selecting one lets you log in

Copy link
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@CDRussell CDRussell force-pushed the feature/craig/passkey_support_internal_builds branch 2 times, most recently from 5add8e8 to f9e4f14 Compare August 8, 2025 09:47
@CDRussell CDRussell marked this pull request as ready for review August 8, 2025 12:49
@@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.duckduckgo.autofill.impl">

<uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN" />
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is required for browsers as we're a special kind of app that is looking to interact with passkeys based on URLs (origins) rather than app package IDs. Google has us listed as an app with privileges to do this (most general apps cannot).

@CDRussell CDRussell force-pushed the feature/craig/passkey_support_internal_builds branch from f9e4f14 to 09d87ca Compare August 12, 2025 14:05
@mikescamell mikescamell self-assigned this Aug 13, 2025
Copy link
Contributor

@mikescamell mikescamell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work! 👏

I tested on my personal device using Bitwarden and everything worked as described 🧑‍🍳💋

:shipit:

@CDRussell CDRussell force-pushed the feature/craig/passkey_support_internal_builds branch from 09d87ca to 0e9aa4f Compare August 13, 2025 12:21
@CDRussell CDRussell merged commit 5f751f5 into develop Aug 13, 2025
7 checks passed
@CDRussell CDRussell deleted the feature/craig/passkey_support_internal_builds branch August 13, 2025 12:37
0nko pushed a commit that referenced this pull request Aug 15, 2025
Task/Issue URL:
https://app.asana.com/1/137249556945/project/1203822806345703/task/1211006058270758?focus=true

### Description
Enables `passkey` support for `internal` builds. 
- Currently the browser reports to websites that passkeys are
unavailable
- With this change, we add support for passkeys that can be used to log
in and register on websites. We do not store passkeys in our app, but
instead allow integration with the system's passkey provider (Google
Password Manager, Samsung Pass etc...)

It's `internal` only to give us some time to see if it brings issues,
get internal feedback etc...

ℹ️ Passkey support depends on which certificate is used to sign the app.
As a browser we have been granted a special exemption for using APIs
around origin but that relies on certificate hash matches. As such, to
test this out in development you will need to [Set up debug code signing
to use whitelisted
certificate](https://app.asana.com/1/137249556945/task/1208295420929846?focus=true)


### Steps to test this PR

- Ensure you are testing on an up-to-date version of `WebView` and
Android API.
- If using an emulator, for best results use one with Google Play
installed.

#### Verify browser shows as supported
- [x] Follow instructions in [Set up debug code signing to use
whitelisted
certificate](https://app.asana.com/1/137249556945/task/1208295420929846?focus=true)
- [x] Install from this branch 
- [x] Visit https://webauthn.io; verify you **do not see** a message
saying browser is unsupported. (if you do, ping me)

#### Verify you can create a new `passkey`
- [x] Enter username (e.g., `chicken`) and tap `Register`; verify you
are prompted to create a passkey.
- [x] do it. (you might be prompted to set up device password if not
already set up)
- [x] Verify you see a `success` message. Tap the `Try it again` button
to return.

#### Verify you can login when username already selected
- [x] Ensure your username is still filled in (e.g., `chicken`) and tap
the `Authenticate` button
- [x] Verify you see the `You're logged in` page. Tap the `Try it again`
button to return

#### Create a 2nd passkey for this website
- [x] Enter another username (e.g., `horse`) and tap `Register` button.
Accept the prompt to create a new passkey.
- [x] Clear out the username field so it's empty
- [x] Tap on `Authenticate` button and verify you see a list of passkeys
and that selecting one lets you log in

Co-authored-by: Craig Russell <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants