Passkeys support in IdpUsernamePasswordForm

closes #41259

Signed-off-by: mposolda <mposolda@gmail.com>
This commit is contained in:
mposolda 2025-07-18 15:45:21 +02:00 committed by Bruno Oliveira da Silva
parent 60bf9689ad
commit 0b98cb7466
2 changed files with 10 additions and 3 deletions

View File

@ -27,6 +27,7 @@ import org.keycloak.authentication.authenticators.browser.UsernamePasswordForm;
import org.keycloak.broker.provider.BrokeredIdentityContext;
import org.keycloak.forms.login.LoginFormsProvider;
import org.keycloak.models.IdentityProviderModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.FormMessage;
import org.keycloak.services.managers.AuthenticationManager;
@ -50,6 +51,10 @@ public class IdpUsernamePasswordForm extends UsernamePasswordForm {
private final static Logger log = Logger.getLogger(IdpUsernamePasswordForm.class);
public IdpUsernamePasswordForm(KeycloakSession session) {
super(session);
}
@Override
protected Response challenge(AuthenticationFlowContext context, MultivaluedMap<String, String> formData) {
return setupForm(context, formData, getExistingUser(context))
@ -94,6 +99,10 @@ public class IdpUsernamePasswordForm extends UsernamePasswordForm {
existingUser.ifPresent(u -> formData.putSingle(AuthenticationManager.FORM_USERNAME, u.getUsername()));
if (isConditionalPasskeysEnabled(existingUser.orElse(null))) {
webauthnAuth.fillContextForm(context);
}
LoginFormsProvider form = context.form()
.setFormData(formData)
.setAttribute(LoginFormsProvider.REGISTRATION_DISABLED, true)

View File

@ -18,7 +18,6 @@
package org.keycloak.authentication.authenticators.broker;
import org.keycloak.authentication.Authenticator;
import org.keycloak.authentication.authenticators.browser.UsernamePasswordForm;
import org.keycloak.authentication.authenticators.browser.UsernamePasswordFormFactory;
import org.keycloak.models.KeycloakSession;
@ -28,11 +27,10 @@ import org.keycloak.models.KeycloakSession;
public class IdpUsernamePasswordFormFactory extends UsernamePasswordFormFactory {
public static final String PROVIDER_ID = "idp-username-password-form";
public static final UsernamePasswordForm IDP_SINGLETON = new IdpUsernamePasswordForm();
@Override
public Authenticator create(KeycloakSession session) {
return IDP_SINGLETON;
return new IdpUsernamePasswordForm(session);
}
@Override