Skip to content
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

Fix #644: Add UV parameter to getAssertion #672

Merged
merged 41 commits into from
Nov 20, 2017
Merged

Fix #644: Add UV parameter to getAssertion #672

merged 41 commits into from
Nov 20, 2017

Conversation

emlun
Copy link
Member

@emlun emlun commented Nov 6, 2017

This resolves #644, and possibly #524 and #645.

Summary:


Preview | Diff

@emlun
Copy link
Member Author

emlun commented Nov 6, 2017

@Kieun may have something to say about how this affects UAF.

@emlun
Copy link
Member Author

emlun commented Nov 6, 2017

I would also like to rename the requireUserVerification member to userVerification, but left it out for now to avoid unnecessary breakage.

@Kieun
Copy link
Member

Kieun commented Nov 7, 2017

This modification indeed affects UAF. But I'm not sure that how many number of UAF silent authenticators are deployed in the market. I would also think that at least user presence is needed during authentication in web space for privacy reason.
But for native application, it would be worth to provide silent authenticators for authentication since a lot of applications already tend to use automated login(authenticate) approach.

@emlun
Copy link
Member Author

emlun commented Nov 7, 2017

By "native application", do you mean platform authenticators (i.e. TPMs integrated in laptops/phones)? There was an exception for them, but it was in authenticatorMakeCredential which has been agreed should for now not be allowed to be silent. Do you request a similar exception for platform authenticators in authenticatorGetAssertion?

@Kieun
Copy link
Member

Kieun commented Nov 7, 2017

I just mean that "native application" is a platform specific RP application such as Android or iOS app that can leverage FIDO silent authenticators for automated login use case.

@emlun
Copy link
Member Author

emlun commented Nov 7, 2017

Ok. That sounds like it falls outside the scope of the WebAuthn spec.

@equalsJeffH
Copy link
Contributor

thanks @emlun -- this now looks nominally OK to me, but I think it really needs explicit buy-in from Chrome, FF, and @rlin1: in that my understanding of the nominal agreement had been that the default interaction case would be 2nd factor -- this seems to be changing it to 1st factor. this is fine by me, however we ought to explcitly get buy-in from other working group participants on it. thx, HTH.

cc: @jcjones @rlin1 @balfanz @leshi @AngeloKai

@emlun
Copy link
Member Author

emlun commented Nov 15, 2017

@equalsJeffH Thanks!

Hm, I did not intend to change the default interaction case. What parts of the changes are suggesting that?

Copy link
Contributor

@rlin1 rlin1 left a comment

Choose a reason for hiding this comment

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

see my comments

@@ -1383,7 +1407,7 @@ attributes.
dictionary AuthenticatorSelectionCriteria {
AuthenticatorAttachment authenticatorAttachment;
boolean requireResidentKey = false;
boolean requireUserVerification = false;
UserVerificationRequirement requireUserVerification = "preferred";
Copy link
Contributor

Choose a reason for hiding this comment

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

Don't have a strong opinion on the default value - as longh as the RP can override it (which is the case IMHO).

@@ -1538,6 +1591,7 @@ an assertion. Its {{PublicKeyCredentialRequestOptions/challenge}} member must be
unsigned long timeout;
USVString rpId;
sequence<PublicKeyCredentialDescriptor> allowCredentials = [];
UserVerificationRequirement userVerification = "preferred";
Copy link
Contributor

Choose a reason for hiding this comment

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

Don't have a strong opinion on the default value - as longh as the RP can override it (which is the case IMHO).

index.bs Outdated
@@ -1560,7 +1618,12 @@ an assertion. Its {{PublicKeyCredentialRequestOptions/challenge}} member must be
:: This optional member contains a list of {{PublicKeyCredentialDescriptor}} object representing [=public key credentials=]
Copy link
Contributor

Choose a reason for hiding this comment

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

objects - need plural here.

Copy link
Member Author

Choose a reason for hiding this comment

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

Good catch, thanks.

index.bs Outdated
by the
[=authenticator=] if it has its own output capability, or by the user agent otherwise.

1. Obtain [=user consent=] for using |selectedCredential|. The prompt for obtaining this [=user consent|consent=] may be shown by
Copy link
Contributor

Choose a reason for hiding this comment

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

We SHOULD NOT require additional user consent gathering by the platform for using an authenticator that is already registered!

index.bs Outdated
1. If |allowCredentialDescriptorList| is now empty, return an error code equivalent to "{{NotAllowedError}}" and terminate the
operation.

1. Prompt the user to select a [=public key credential|credential=] |selectedCredential| from |allowCredentialDescriptorList|.
Copy link
Contributor

Choose a reason for hiding this comment

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

this is only required if the list has more than 1 entry.

Copy link
Contributor

Choose a reason for hiding this comment

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

so we should say: If the |allowCredentialDescriptorList| contains multiple entries, then ...

Copy link
Member Author

Choose a reason for hiding this comment

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

Done!

index.bs Outdated
by the
[=authenticator=] if it has its own output capability, or by the user agent otherwise.

1. Obtain [=user consent=] for using |selectedCredential|. The prompt for obtaining this [=user consent|consent=] may be shown by
Copy link
Contributor

Choose a reason for hiding this comment

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

We SHOULD be clear that user verification, e.g. a fingerprint swipe IS a method for obtaining user consent - we don't want additional dialog boxes!

@jcjones
Copy link
Contributor

jcjones commented Nov 15, 2017

@emlun said:

Hm, I did not intend to change the default interaction case. What parts of the changes are suggesting that?

I think using "preferred" as the default option is what @equalsJeffH is referring to, and I agree that it does change the nature of the default interaction.

I added a comment where I was pinged (https://github.com/w3c/webauthn/pull/672/files#r151271242). I won't oppose the will of the working group if there's consensus on this, but my preference would be to have this default to "discouraged" to keep the common case simple.

@emlun
Copy link
Member Author

emlun commented Nov 15, 2017

@jcjones Ah, I see. Those are good points. I don't have a strong opinion either way. As far as I can tell it seems like most are more in favor of "discouraged", but only @akshayku has voiced a strong opinion. I'm fine with changing the default to "discouraged" if noone objects.

@jcjones
Copy link
Contributor

jcjones commented Nov 15, 2017

@emlun: It looks to me like there's broad agreement on that. I don't see anything problematic with this change otherwise, and I think if you swap those defaults then this should be free to merge (after we get confirmation from the other 3 reviewers)

@jcjones
Copy link
Contributor

jcjones commented Nov 15, 2017

Oops, I spoke too soon. I missed the embedded threads. Disregard.

Still, I think adjusting that default would help. But the points about presence vs. user verification are better articulated by Rolf, Akshay, Jeff, et. al than I can do.

@akshayku
Copy link
Contributor

@jcjones : What is the common case in your opinion? Does not it maps to RP supporting all kind of authenticators?? and Isn't that the direction we should be going to?

@emlun
Copy link
Member Author

emlun commented Nov 16, 2017

"preferred" indicates that the RP supports all authenticators, yes, but so does "discouraged". I think it's also fair to say "discouraged" maps closer to the previous default requireUserVerification: false (in makeCredential).

@akshayku
Copy link
Contributor

@emlun

No. In discouraged case, even if authenticator supports user verification, RP probably will not get it and RP has no way to know/take advantage of that feature. Similarly, Authenticator who has done extra work to make user verification possible in their product, will unfairly suffer because by default that feature is not used. preferred maps to default behavior of authenticator and RP has a better chance of supporting all kind of authenticators.

@emlun
Copy link
Member Author

emlun commented Nov 16, 2017

@akshayku Ok. I guess you and I use "support" to mean different things - neither the client nor the RP will refuse authenticators with UV in the "discouraged" case, so they'll still support them in that sense.

Anyway, with that it looks like consensus is possible for "preferred" but not for "discouraged". Still waiting for responses from @balfanz and @leshi.

@jcjones
Copy link
Contributor

jcjones commented Nov 16, 2017

I think @akshayku and I are on different pages, and maybe I'm on the same page as @emlun, but to be honest: I'm fine with "preferred", and arguing that letting the common case promote UV authenticators is fine and in keeping with the rest of the model IMO.

@christiaanbrand
Copy link

I don't really care that much. As long as we can override it.

@akshayku
Copy link
Contributor

@emlun : I think we have an agreement for preferred. If you agree, lets check this in so that we can move on.

@emlun
Copy link
Member Author

emlun commented Nov 17, 2017

Great! I'll go ahead and merge if noone objects by Monday morning CET.

@emlun emlun merged commit e517264 into master Nov 20, 2017
@emlun emlun deleted the issue-644 branch November 20, 2017 09:21
@nadalin
Copy link
Contributor

nadalin commented Nov 20, 2017

@jcjones @balfanz @AngeloKai Please review asap so try to get closure before meeting this week

@equalsJeffH
Copy link
Contributor

@nadalin -- this was merged 7.5 hr before your comment above :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

#getAssertion alg needs to pass authenticator selection requirements to authenticatorGetAssertion operation
9 participants