Kerberos/LDAP fixes
This commit is contained in:
1 parent
9dd5ecd464
commit
9f8b59dfb6
8 files changed
+29
-36
No files matched your search
+8
-6
@@ -210,15 +210,17 @@ public class KerberosFederationProvider implements UserFederationProvider {
|
||||
UserModel user = session.userStorage().getUserByUsername(username, realm);
|
||||
if (user != null) {
|
||||
logger.debug("Kerberos authenticated user " + username + " found in Keycloak storage");
|
||||
if (!isValid(user)) {
|
||||
throw new IllegalStateException("User with username " + username + " already exists, but is not linked to provider [" + model.getDisplayName() +
|
||||
if (isValid(user)) {
|
||||
return proxy(user);
|
||||
} else {
|
||||
logger.warn("User with username " + username + " already exists, but is not linked to provider [" + model.getDisplayName() +
|
||||
"] or kerberos principal is not correct. Kerberos principal on user is: " + user.getAttribute(KERBEROS_PRINCIPAL));
|
||||
session.userStorage().removeUser(realm, user);
|
||||
}
|
||||
|
||||
return proxy(user);
|
||||
} else {
|
||||
return importUserToKeycloak(realm, username);
|
||||
}
|
||||
|
||||
logger.debug("Kerberos authenticated user " + username + " not in Keycloak storage. Creating him");
|
||||
return importUserToKeycloak(realm, username);
|
||||
}
|
||||
|
||||
protected UserModel importUserToKeycloak(RealmModel realm, String username) {
|
||||
|
||||
+1
-8
@@ -47,14 +47,7 @@ public class SPNEGOAuthenticator {
|
||||
Subject serverSubject = kerberosSubjectAuthenticator.authenticateServerSubject();
|
||||
authenticated = Subject.doAs(serverSubject, new AcceptSecContext());
|
||||
} catch (Exception e) {
|
||||
String message = e.getMessage();
|
||||
if (e instanceof PrivilegedActionException && e.getCause() != null) {
|
||||
message = e.getCause().getMessage();
|
||||
}
|
||||
log.warn("SPNEGO login failed: " + message);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("SPNEGO login failed: " + message, e);
|
||||
}
|
||||
log.warn("SPNEGO login failed: " + e.getMessage(), e);
|
||||
} finally {
|
||||
kerberosSubjectAuthenticator.logoutServerSubject();
|
||||
}
|
||||
|
||||
+15
-8
@@ -353,6 +353,11 @@ public class LDAPFederationProvider implements UserFederationProvider {
|
||||
String username = spnegoAuthenticator.getAuthenticatedUsername();
|
||||
UserModel user = findOrCreateAuthenticatedUser(realm, username);
|
||||
|
||||
if (user == null) {
|
||||
logger.warn("Kerberos/SPNEGO authentication succeeded with username [" + username + "], but couldn't find or create user with federation provider [" + model.getDisplayName() + "]");
|
||||
return CredentialValidationOutput.failed();
|
||||
}
|
||||
|
||||
return new CredentialValidationOutput(user, CredentialValidationOutput.Status.AUTHENTICATED, state);
|
||||
} else {
|
||||
Map<String, Object> state = new HashMap<String, Object>();
|
||||
@@ -404,15 +409,17 @@ public class LDAPFederationProvider implements UserFederationProvider {
|
||||
UserModel user = session.userStorage().getUserByUsername(username, realm);
|
||||
if (user != null) {
|
||||
logger.debug("Kerberos authenticated user " + username + " found in Keycloak storage");
|
||||
if (!isValid(user)) {
|
||||
throw new IllegalStateException("User with username " + username + " already exists, but is not linked to provider [" + model.getDisplayName() +
|
||||
"] or LDAP_ID is not correct. LDAP_ID on user is: " + user.getAttribute(LDAP_ID));
|
||||
if (isValid(user)) {
|
||||
return proxy(user);
|
||||
} else {
|
||||
logger.warn("User with username " + username + " already exists, but is not linked to provider [" + model.getDisplayName() +
|
||||
"] or LDAP_ID is not correct. Stale LDAP_ID on local user is: " + user.getAttribute(LDAP_ID));
|
||||
session.userStorage().removeUser(realm, user);
|
||||
}
|
||||
|
||||
return proxy(user);
|
||||
} else {
|
||||
// Creating user to local storage
|
||||
return getUserByUsername(realm, username);
|
||||
}
|
||||
|
||||
// Creating user to local storage
|
||||
logger.debug("Kerberos authenticated user " + username + " not in Keycloak storage. Creating him");
|
||||
return getUserByUsername(realm, username);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user