53 KeycloakSession session = context.getSession();
54 RealmModel realm = context.getRealm();
61 String username =
getUsername(context, serializedCtx, brokerContext);
62 if (username == null) {
63 ServicesLogger.LOGGER.resetFlow(realm.isRegistrationEmailAsUsername() ?
"Email" :
"Username");
69 ExistingUserInfo duplication =
checkExistingUser(context, username, serializedCtx, brokerContext);
71 if (duplication == null) {
72 logger.debugf(
"No duplication detected. Creating account for user '%s' and linking with identity provider '%s' .",
73 username, brokerContext.getIdpConfig().getAlias());
75 UserModel federatedUser = session.users().addUser(realm, username);
76 federatedUser.setEnabled(
true);
77 federatedUser.setEmail(brokerContext.getEmail());
78 federatedUser.setFirstName(brokerContext.getFirstName());
79 federatedUser.setLastName(brokerContext.getLastName());
81 for (Map.Entry<String, List<String>> attr : serializedCtx.getAttributes().entrySet()) {
82 federatedUser.setAttribute(attr.getKey(), attr.getValue());
85 AuthenticatorConfigModel config = context.getAuthenticatorConfig();
86 if (config != null && Boolean.parseBoolean(config.getConfig().get(IdpCreateUserIfUniqueAuthenticatorFactory.REQUIRE_PASSWORD_UPDATE_AFTER_REGISTRATION))) {
87 logger.debugf(
"User '%s' required to update password", federatedUser.getUsername());
88 federatedUser.addRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD);
93 context.setUser(federatedUser);
97 logger.debugf(
"Duplication detected. There is already existing user with %s '%s' .",
98 duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue());
101 context.getAuthenticationSession().setAuthNote(
EXISTING_USER_INFO, duplication.serialize());
103 Response challengeResponse = context.form()
104 .setError(Messages.FEDERATED_IDENTITY_EXISTS, duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue())
105 .createErrorPage(Response.Status.CONFLICT);
106 context.challenge(challengeResponse);
108 if (context.getExecution().isRequired()) {
110 .user(duplication.getExistingUserId())
111 .detail(
"existing_" + duplication.getDuplicateAttributeName(), duplication.getDuplicateAttributeValue())
112 .removeDetail(Details.AUTH_METHOD)
113 .removeDetail(Details.AUTH_TYPE)
114 .error(Errors.FEDERATED_IDENTITY_EXISTS);
static Logger logger
Definition: IdpCreateUserIfUniqueAuthenticator.java:43
static final String ENFORCE_UPDATE_PROFILE
Definition: AbstractIdpAuthenticator.java:51
void userRegisteredSuccess(AuthenticationFlowContext context, UserModel registeredUser, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:144
ExistingUserInfo checkExistingUser(AuthenticationFlowContext context, String username, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:120
String getUsername(AuthenticationFlowContext context, SerializedBrokeredIdentityContext serializedCtx, BrokeredIdentityContext brokerContext)
Definition: IdpCreateUserIfUniqueAuthenticator.java:137
static final String EXISTING_USER_INFO
Definition: AbstractIdpAuthenticator.java:45
static final String BROKER_REGISTERED_NEW_USER
Definition: AbstractIdpAuthenticator.java:54