-
Notifications
You must be signed in to change notification settings - Fork 172
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
providing info about authenticator availability / attachments #764
Comments
Thanks for the questions. There are two main reasons for why these pieces of information are not available. First, due to privacy considerations we have chosen to explicitly forbid clients from making it possible for an RP to silently determine what credentials the user owns. Second, the spec is written to support an asynchronous "hot-plugging" interaction flow where the user can plug in authenticator after the RP calls the methods on The privacy considerations are discussed in #184, #204 and #687, and in the editor's draft of the spec in §14.2. Authentication Ceremonies. In summary: providing the information you request would also give malicious RPs a reliable way to silently identify a user without consent. The "hot-plugging" interaction flow, discussed in #613, #508 and #574, means that the client will wait for an authenticator to become available within a timeout - which could be immediately, e.g., built-in platform authenticators or an already connected USB key - and attempt to use the authenticator when it shows up. If the user denies consent, or ignores the prompt, the client will keep waiting for another authenticator to become available. Only when the timer expires does the client return a failure to the caller. Thus, there is no one instant when the client can check which authenticators are "available", because there could for instance be a USB key "available" sitting next to the computer which would only be seen by the client after the user plugs it in. The "hot-plugging" flow also ties in with the privacy considerations, as described in §14.2. Authentication Ceremonies. What you can do is use the Does this answer some of your questions? |
@emlun thank you so much for your very detailed answer and all the context around these decisions! This provides a lot to read and I'm still working through it, much appreciated. I'm somewhat curious what the expected workflow for developers and users would be around the scenarios I asked. I realize that the specification is a draft so it might be difficult to answer, but what should developers do in the situation where a user enrolls a platform authenticator but we don't have the information around what device/platform they are accessing our website from? Is the expected workflow to do some sort of user agent checking/guessing? |
So if I understand you correctly, your main concerns here are:
Here are my thoughts on (1) in a few scenarios:
I didn't expect this when I started writing the above, but it actually looks like this isn't that big an issue after all! Let me know if I overlooked something in my musings above. Question (2) is a harder one, I think. Hopefully the browsers will do something to help with this, but what and how is currently outside the spec. If all else fails, I guess you could work around it by asking the user what kind of authenticator(s) they want to use. What do you think about that? |
Ah, I did indeed miss at least one thing:
This probably does require some guesswork and/or workarounds using cookies or browser storage, I think. For what it's worth, you can let your guesswork be informed by some timing information. While the API won't let you draw any definite conclusions (again, because of privacy concerns), you could probably guess that if the |
As decided on the 2018-08-08 WG call, we're closing this since there's no way to provide the requested information about the availability of enrolled authenticators without leaking identifying information without user consent. Information about available authenticator attachment modes (but not about credential availability) could possibly be added in L2, but we're closing this for now. |
Thank you for all the responses and for discussing it on your call! |
Apologies if some of these usability issues have been answered already. In trying to develop with the spec I'm feeling that it doesn't provide granular information that would be very useful for providing users with an easy authentication workflow. There seems to be no information around:
Android, for example, has
FingerprintManager
for providing this information, withfingerprintManager.isHardwareDetected()
,fingerprintManager.hasEnrolledFingerprints()
, it hasKeyguardManager
for determining if a PIN/pattern/password is available, etc.There are a few usability issues I've run into:
navigator.credentials.create
request, all authenticators are notified and request the user's attention. Windows Hello will pop up a modal, a Yubikey flashes, maybe a soft token pops up a notification as well.The spec mentions that relying parties can discover credentials using optional criteria, but I don't know ahead of time what criteria to request.
Another issue:
navigator.credentials.get
request.What would be great is if devs get more granular information about authenticators; their availability, their enrollment status, etc. Something like:
navigator.credentials.isAuthenticatorAvailable() -> Boolean
or more specifically:
navigator.credentials.getAvailableAuthenticatorAttachments() -> AuthenticatorAttachment[]
navigator.credentials.hasEnrolledAuthenticator(credentialID) -> Boolean
Any thoughts around this would be welcomed.
The text was updated successfully, but these errors were encountered: