-
Notifications
You must be signed in to change notification settings - Fork 183
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
PublicKeyCredentialUserEntity difference between name, displayName and id not clear #622
Comments
Are two separate "names" even needed when we have |
@emlun I believe the
|
Yes, but then what's the point of |
@emlun No. User.id was added by Google and contains a binary lookup key for their user database. It is not human readable and not intended to be. As I understand it, Name is supposed to be the login name as used traditionally. Display Name is just a pretty printing name. In an authenticator with a display or in the case of multiple accounts in a first factor situation (see CTAP), we need a unique, printable identifier to show to the user that uniquely identifies this credential (ie, the traditional user name which is instantly recognizable to the user). The displayName could be the pretty printing name of this account. For example, if a user has multiple accounts on gmail:
User.id is a relying party specific field that is basically a database lookup field. None of this is obvious from the current language. |
Ok. But then if |
Oh right, I think I can answer that myself. It's to support first factor login while making it harder for an attacker with a stolen authenticator to identify the authenticator's user, right? And that's also why you shouldn't put something identifying like an email address in But wait, aren't you saying that the UI for selecting a first factor credential will display the |
I'll answer myself again: What prevents the attacker is the assumption that the authenticator will verify the user's identity before giving up the stored account info. Context: PR #558 |
As far as I can tell, it is only there to make Google's life easier. It does not make it harder in a first factor situation because knowing the user name is not necessary for an attacker with the authenticator to use it as a first factor credential. He can just log in with each offered credential and figure out the user name that way. It could conceivably be an additional privacy protection against eavesdropping on the authenticator traffic because the username is not passed along although I have been repeatedly told eavesdroppers are considered out of scope. It sounds thin to me. Using the user.id as only valid unique identifier makes it too easy to spoof the user.name field and mislead the user about which credential he is logging in with (although to what end?). I would turn user.id in a field that the client and authenticator MUST return in first factor situation but the RP MAY include and require the use of user.name as a unique identifier in all cases. Is user verification required for first factor situations? or just user presence? |
Reading up on #558, User.id MAY be included by the RP. If it is, client MUST pass it on. Authenticator MUST return it when only a RP ID is passed in and MUST NOT return it when a Credential ID is passed in. Make User.name mandatory to include for RPs and authenticator MUST return it in first factor cases if user.id is not present. Agreed? |
It troubles me that
I haven't lifted I think this would improve clarity a lot, but it would be a breaking change. What do people think? |
Why are we trying to inherit from a common dictionary when they have little or no meaning in common? There are only some identically named optional fields in common. |
@jovasco asked:
It is an artifact of the credman merge. seemed OK at the time, tho is evolving as the nuances (eg for supporting first factor aka passwordless) become more well-understood by webauthn participants. WRT @emlun's proposal #622 (comment) -- I'm inclined to simply clarify the present spec rather than rename things, but could be convinced otherwise if there is support for doing #622 (comment) by our browser-implementer colleagues. |
@emlun Would you be willing to move the renaming proposal to a separate issue and keep this one for clarifying the language? |
Certainly: #646 |
This resolves w3c#622. This also changes some display name examples to include non-ASCII characters.
For name:
for displayName:
Both say they are friendly identifiers and are intended for display (one explicitly, the other by its name).
When displaying account selection, a unique displayable name is required so the user can always differentiate between his different accounts.
So name should be the login name, unique for the relying party and suitable for display.
displayName should just be a pretty printing name, uniqueness is not required.
for id:
id is not intended for display, yet the only field marked as a unique identifier.
The text was updated successfully, but these errors were encountered: