-
Notifications
You must be signed in to change notification settings - Fork 10
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
Ideal Recommendations #7
Comments
Agreed with this.
Yes, we should think about this. Probably makes sense to have this as you suggest.
I don't know about this. This is the exact way that RPs are used to doing things in native apps (where biometrics are strictly used for reauth). If a credential is only for reauth, I think it makes sense to use local storage to know whether it's there (it creates the cleanest experience). Yes, if the user is in "another browser" they'll need to "opt in again" (and ideally the credential shouldn't get overwritten as sbweeden and I have discussed before), but this seems like an edge case. |
Hi @akshayku - a couple of thoughts:
|
The problem with using the excludeCredentials list during UVPA registration is that the user agent cannot locally detect ahead of time whether or not the platform authenticator already has a credential for this userid/rpid combination (such as one created by another user agent on the same platform). If a credential already exists, the user experience is poor (an error). To deliver a great user experience you are therefore forced to not use the excludeCredentials list. After that an RP then has to deal with the subsequent nuances of different platform authenticator behaviour that happens when setting rk=false during credential creation. Currently Microsoft (and more recently Apple) have one set of behaviours, and Google (Chrome on Mac and Android) have a different set of behaviours. These differences break the consistency of the pattern. |
Hi @balfanz
Resident keys is in Level 1 and not a Level 2 thing. I was expecting that we are developing the document with future in mind and how things will play once we have compatibility in terms of implementation so that RP only have to follow one guide. If we want this document to be used against current implementations, there cannot be a single recommendation as no single recommendation fully works across all the platforms. I am OK splitting the document into platform specific recommendations we you are thinking very short term.
I am OK proposing the changes. On Windows, I don't want to recommend non-resident keys behavior as moving them in the future to usernameless flows is not easy. Problem is asking RPs to redevelop the solution in say 6 months when you support resident keys. Many RPs are not that fast. As noted above, my version of single recommendation will not work on Android and I don't see a way around that problem apart from platform specific recommendations. I am OK making the PRs with the changes. Let me know. |
Akshay, can you help by spelling out the user journey for RPs who want to use platform based resident credentials on Windows today? Since the credentials will only remain "on device" I'm not sure there's much value beyond the re-authentication use case right now. Once you're logged in and create the credentials, the RP doesn't need FIDO to do usernameless. The user is already logged in. They can just store the username in a cookie. Google accounts work this way today. Once you "sign out" you still see a list of all your previously signed in accounts and can sign back in instantly, without needing to enter a username. None of this needs FIDO, right? And it works on all platforms. |
My vision is to have cross-browser usernameless, passwordless logins. Reauth as well as bootstrapping using platform credentials. Here is the flow for first time login on browser 1
Subsequent Logins on different browser
Challenges vs benefits
|
So, if I understand correctly, you're addressing two shortcomings of the current proposal (which boils down to the same technical issue: no cookie present).
What you're proposing makes sense, but I still have a hard time recommending this as a solution as the user will inevitably move to another machine at some point, and they won't be able to log in there at all (unless they had a backup mechanism to get into their account, which they could have used also in the case where the cookies weren't present). Therefore, unless the user also has a security key (with resident credentials) or another form of x-platform credential (maybe using PaaSK/caBLE) I don't think we should be recommending this use case today as RPs are likely to just completely shoot themselves in the foot. Does this make sense? |
Yes. Kind of. The problem is once we create a platform credential as non-resident/non-discoverable, we cannot change that at later stage when we want to have a usernameless flows. RPs will eventually want to go for usernameless passwordless scenarios for external security keys. More so for using phone as external authenticator via caBLE. So if I want to use phone for usernameless cross platform scenarios eventually, you should think about creating those credentials as discoverable. |
Hey @christiaanbrand what about the use case of a browser based app and a native mobile app from the same RP on the same device that want to share a single credential registration. Do you think that is also an edge case? |
Good point. I'm happy to say that RPs should probably create platform keys as "discoverable" for forward-compatibility (even though it won't make much of a difference today). Will someone kick off a PR for that? |
@sbweeden As far as remember, Android has been supporting sharing credentials between the web app and native app (which is associated to the same rpId) by leveraging the digital asset link. |
Concerning the use case of same device/different clients , I am Use Case: A user has bootstrapped login for RP1 and RP2 on a browser based on the Question: I am wondering how the reauthentication model works for such a web Will the cookies stored in Chrome be shared with Android System WebView At any rate, this is one of the main use cases for mobile service |
One thing I want to mention about platform authenticator is that the credentials should be discoverable to all browsers (webview or others) supporting Webauthn on the same machine. If FIDO community's ultimate goal is to go username-less flow and platforms eventually support PaaK, we should create resident key for platform authenticator from now. If not, RP will suffer hard time to provide great UX for the transition. |
Different platforms are at different stages of implementing the webauthn and CTAP specs.
There have been issues and solutions suggested for non-resident keys behavior on Windows. Resident keys and ClientPIN is not supported on Android. Etc etc.
However, instead of trying to fit in deployments due to current limitations, we should prepare this document for a long term webauthn standard on how to adopt FIDO for years to come.
Creating resident keys during create() call for platform authenticators
Current document does not recommend creating resident keys for platform authenticators. I believe this should change as I don't see any reason for general webauthn for not creating resident keys.
I think I remember one use case for webpayments where non-discoverability was important. But I don't remember the full details.
Whether or not, exclude list should be provided during create() call
Whether RPs should depend on local storage to remember credentialIDs.
There may be more, we need to have the discussion around it.
The text was updated successfully, but these errors were encountered: