@@ -88,8 +88,8 @@ public function startRegistration(IUser $user, string $serverHost): PublicKeyCre
88
88
];
89
89
90
90
$ authenticatorSelectionCriteria = new AuthenticatorSelectionCriteria (
91
- null ,
92
- AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_DISCOURAGED ,
91
+ AuthenticatorSelectionCriteria:: AUTHENTICATOR_ATTACHMENT_NO_PREFERENCE ,
92
+ AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_PREFERRED ,
93
93
null ,
94
94
false ,
95
95
);
@@ -151,7 +151,8 @@ public function finishRegister(PublicKeyCredentialCreationOptions $publicKeyCred
151
151
}
152
152
153
153
// Persist the data
154
- return $ this ->repository ->saveAndReturnCredentialSource ($ publicKeyCredentialSource , $ name );
154
+ $ userVerification = $ response ->attestationObject ->authData ->isUserVerified ();
155
+ return $ this ->repository ->saveAndReturnCredentialSource ($ publicKeyCredentialSource , $ name , $ userVerification );
155
156
}
156
157
157
158
private function stripPort (string $ serverHost ): string {
@@ -160,7 +161,11 @@ private function stripPort(string $serverHost): string {
160
161
161
162
public function startAuthentication (string $ uid , string $ serverHost ): PublicKeyCredentialRequestOptions {
162
163
// List of registered PublicKeyCredentialDescriptor classes associated to the user
163
- $ registeredPublicKeyCredentialDescriptors = array_map (function (PublicKeyCredentialEntity $ entity ) {
164
+ $ userVerificationRequirement = AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_REQUIRED ;
165
+ $ registeredPublicKeyCredentialDescriptors = array_map (function (PublicKeyCredentialEntity $ entity ) use (&$ userVerificationRequirement ) {
166
+ if ($ entity ->getUserVerification () !== true ) {
167
+ $ userVerificationRequirement = AuthenticatorSelectionCriteria::USER_VERIFICATION_REQUIREMENT_DISCOURAGED ;
168
+ }
164
169
$ credential = $ entity ->toPublicKeyCredentialSource ();
165
170
return new PublicKeyCredentialDescriptor (
166
171
$ credential ->type ,
@@ -173,7 +178,7 @@ public function startAuthentication(string $uid, string $serverHost): PublicKeyC
173
178
random_bytes (32 ), // Challenge
174
179
$ this ->stripPort ($ serverHost ), // Relying Party ID
175
180
$ registeredPublicKeyCredentialDescriptors , // Registered PublicKeyCredentialDescriptor classes
176
- AuthenticatorSelectionCriteria:: USER_VERIFICATION_REQUIREMENT_DISCOURAGED ,
181
+ $ userVerificationRequirement ,
177
182
60000 , // Timeout
178
183
);
179
184
}
0 commit comments