Replies: 2 comments 2 replies
I never think help shown on the first time only is that user friendly, especially for programs/concepts that are triggered by other events and thus show up unexpectedly. It is all too easy to close that first screen, maybe because the modal was unexpected, or it was triggered accidentally, and then when the user comes to use it for the first time for real there is nothing displayed. Similarly a user may not remember the relevant details later. In the extreme case the user may not even be the same person who triggered the modal the first time, such as for a shared computer. From a maintainability perspective it also introduces a code path that is not exercised in regular use. My suggestion would be to either make such information a permanent part of the UI, perhaps being fairly short with links to more information. Another approach might be to have the information be collapsible and then remember the state of that collapse, though that does require retaining additional state.
Does ambient mode need any kind of UI for the system component? Isn't it just a background check against "known" credential sources, and the browser handles all the UI?
I'm of two minds on the "Never" option. On the one hand it is a useful defence against buggy apps that accidentally keep requesting permissions they don't need, and there can even be a security argument as a defence against an MFA fatigue style attack where an application repeatedly requests credentials in the hope that the user accepts the prompt to make it stop annoying them. On the other hand I could see a user dismissing a prompt with "Never" if they want to stop it blocking their current task, and then being confused about why it isn't working later when they do want to sign in. This behaviour has been trained into users with all the cookie banners and newsletter popups that modern digital surfaces are infected with. It is commonly quite difficult to undo selecting "Never", as it often requires diving deep into uncommon settings menus.
There are permissions listed on the GNOME Settings page under Apps > AppName. So I imagine that could be expanded to include credential permissions. The other way to pivot it would be to have a list of credentials and see what apps can access them, which would have to be a new section, or perhaps a separate app.
Getting permissions at runtime is a lot nicer for systems that install things non-interactively. For example, maybe an update running in the background adds a new scoped access. There is also the case for pre-installed software on a fresh operating system install, as well as for image-based update systems that just work off filesystem images and never execute app specific code at install time. That said, non-interactive programs might want some way to pre-flight these permission checks, so they can avoid blocking on them if they are pulling in credentials non-interactively. That said, I'm not sure whether this is a supported use case given the desire for user presence checking on Passkeys.
More for the registration use case but should probably remember the last used transport across origins as well. I suspect most people will have one transport they use for most things rather than switching transport for every origin. |












Uh oh!
There was an error while loading. Please reload this page.
These are some ideas and concepts we need to convey in the UI. Writing these out fully to make it clear. I will update as I come up with more, and maybe do some paper wireframes and add screenshots from other OS implementations.
Entrypoints
There are two main entrypoints: browsers and apps. Browsers and apps have different permissions prompts, but the UI for the authentication ceremony should be the same
Intro screen
Maybe the first time a user uses the credential portal, they should be introduced to it. Or maybe just for passkeys since they're new? Or maybe we just let the normal UI guide them.
e.g.
UI modes
Permissions
Cf. #184
This section is sort of out of scope of this particular project, since it involves the UX of various app distributors, but still good to get an idea of how we want to do this so we can all agree.
Permissions are based on web origins (think domain, like
example.com). An application/browser can have different levels of permission per origin.These privilege levels can be scoped to a particular origin or global (any origin).
Only browsers should be granted global, privileged access to credentials. They should be prompted the first time they try to use any origin with "ExampleBrowser wants to access credentials for all websites." This permission should also be clearly displayed before installing the app, but that's up to app distributors.
Other combinations are allowed:
spotify.comto skip prompts.These can also be mixed, e.g. if FooApp has a flagship instance of the service at
fooapp.com, they could be given privileged, scoped access to that origin, but unprivileged, global(On a technical note, these permissions are requested by the app developer via entitlements, and should be checked by the app distributors whether it is valid, which should help that last category of unprivileged, scoped access from becoming an unmitigated phishing vector.)
Permission persistence
Do we want to have the ability to grant permissions scoped by time? I.e., This time, Always, Not this time, Never?
Runtime vs. install time permission prompts
We need to decide whether prompting at runtime is necessary or just at install time. I lean toward being more explicit in this case and doing it both install time and runtime, since it might be a gap of time before they request credentials after installing.
Managing Permissions
We probably should have a way to list the origin permissions for each app. Does this belong in GNOME Settings?
Credential Selection
The credential selection screen should make a few things clear:
bank.comiframe on amerchant.comwebpage. In this case, there are two origins plus the browser that should be displayed.The credentials available can be split along a few dimensions:
"Known" vs. "Potential" Credential sources
Some credentials are known to match the incoming request as soon as it starts. This includes:
Potential credentials are all the other types of credentials that are not known to the service at request time, like
The "known" credentials should probably be prioritized over the "potential" credentials. Some of the potential credentials require a click (like the locked credential provider), but others may be activated by the user in other ways to advance the ceremony (e.g. scanning the QR code, touching the USB key, tapping the NFC credential).
Credential Types
We intend to allow apps to request multiple credential types for logging in, like passkeys, passwords. (On creation, only one credential type is allowed.)
When apps request multiple credentials to authenticate with, we'll need to distinguish the type of request (and probably prioritize passkeys over passwords)
Credential transports
USB
When a USB credential is plugged in, it becomes immediately available as a credential source. The physical device itself begins blinking, and the user can touch it to select this credential.
One UI quirk that different desktop platforms do differently is around what to do when multiple USB credentials are plugged in. macOS requires you to touch the USB device (to select), enter the PIN, and then touch again to assert user presence. Windows skips the first touch and allows you to click on the USB device, skipping straight to PIN entry, and then one touch for user presence. (I think they may also automatically advance to the USB screen when it is plugged in and there is only one available.)
(The platform may also have a PPUAT that allows it to query the available credentials. Should we update the list of known credentials when this happens?)
Assuming we're going with "touch to select," here's a general flow:
Hybrid QR Code
Credential Provider
If the user selects one of these, the credential provider will be notified to unlock the vault (if necessary) and collect user verification. The credential provider may defer to something like Polkit for user verification, which would mean that their app's window is never drawn, so they can go straight from clicking on the credential, to authenticating with Polkit, and back to the calling application with the successful credential.
TODO: expand on this
Linked Device
Platform authenticator
excludeCredentialsis empty on the WebAuthn registration request)signalAllAcceptedCredentialssays that the only credential is the device-bound credential we just used, we could send a warning notification.NFC
TODO
BLE
TODO
Other sorting
security-keyas a hint so that we should show the security key option prominently so the user isn't confused. These are just hints, so we shouldn't remove the other options, only prioritize the hinted ones.Other screens
These may or may not belong inline in the ceremony flow.
All reactions