|
@@ -232,6 +232,7 @@ import org.elasticsearch.xpack.security.rest.action.user.RestGetUsersAction;
|
|
|
import org.elasticsearch.xpack.security.rest.action.user.RestHasPrivilegesAction;
|
|
|
import org.elasticsearch.xpack.security.rest.action.user.RestPutUserAction;
|
|
|
import org.elasticsearch.xpack.security.rest.action.user.RestSetEnabledAction;
|
|
|
+import org.elasticsearch.xpack.security.support.ExtensionComponents;
|
|
|
import org.elasticsearch.xpack.security.support.SecurityIndexManager;
|
|
|
import org.elasticsearch.xpack.security.support.SecurityStatusChangeListener;
|
|
|
import org.elasticsearch.xpack.security.transport.SecurityHttpSettings;
|
|
@@ -391,10 +392,12 @@ public class Security extends Plugin implements ActionPlugin, IngestPlugin, Netw
|
|
|
final AnonymousUser anonymousUser = new AnonymousUser(settings);
|
|
|
final ReservedRealm reservedRealm = new ReservedRealm(env, settings, nativeUsersStore,
|
|
|
anonymousUser, securityIndex.get(), threadPool);
|
|
|
+ final SecurityExtension.SecurityComponents extensionComponents = new ExtensionComponents(env, client, clusterService,
|
|
|
+ resourceWatcherService, nativeRoleMappingStore);
|
|
|
Map<String, Realm.Factory> realmFactories = new HashMap<>(InternalRealms.getFactories(threadPool, resourceWatcherService,
|
|
|
getSslService(), nativeUsersStore, nativeRoleMappingStore, securityIndex.get()));
|
|
|
for (SecurityExtension extension : securityExtensions) {
|
|
|
- Map<String, Realm.Factory> newRealms = extension.getRealms(resourceWatcherService);
|
|
|
+ Map<String, Realm.Factory> newRealms = extension.getRealms(extensionComponents);
|
|
|
for (Map.Entry<String, Realm.Factory> entry : newRealms.entrySet()) {
|
|
|
if (realmFactories.put(entry.getKey(), entry.getValue()) != null) {
|
|
|
throw new IllegalArgumentException("Realm type [" + entry.getKey() + "] is already registered");
|
|
@@ -420,7 +423,7 @@ public class Security extends Plugin implements ActionPlugin, IngestPlugin, Netw
|
|
|
final ReservedRolesStore reservedRolesStore = new ReservedRolesStore();
|
|
|
List<BiConsumer<Set<String>, ActionListener<RoleRetrievalResult>>> rolesProviders = new ArrayList<>();
|
|
|
for (SecurityExtension extension : securityExtensions) {
|
|
|
- rolesProviders.addAll(extension.getRolesProviders(settings, resourceWatcherService));
|
|
|
+ rolesProviders.addAll(extension.getRolesProviders(extensionComponents));
|
|
|
}
|
|
|
|
|
|
final ApiKeyService apiKeyService = new ApiKeyService(settings, Clock.systemUTC(), client, getLicenseState(), securityIndex.get(),
|
|
@@ -436,7 +439,7 @@ public class Security extends Plugin implements ActionPlugin, IngestPlugin, Netw
|
|
|
getLicenseState().addListener(allRolesStore::invalidateAll);
|
|
|
getLicenseState().addListener(new SecurityStatusChangeListener(getLicenseState()));
|
|
|
|
|
|
- final AuthenticationFailureHandler failureHandler = createAuthenticationFailureHandler(realms);
|
|
|
+ final AuthenticationFailureHandler failureHandler = createAuthenticationFailureHandler(realms, extensionComponents);
|
|
|
authcService.set(new AuthenticationService(settings, realms, auditTrailService, failureHandler, threadPool,
|
|
|
anonymousUser, tokenService, apiKeyService));
|
|
|
components.add(authcService.get());
|
|
@@ -496,11 +499,12 @@ public class Security extends Plugin implements ActionPlugin, IngestPlugin, Netw
|
|
|
return authorizationEngine;
|
|
|
}
|
|
|
|
|
|
- private AuthenticationFailureHandler createAuthenticationFailureHandler(final Realms realms) {
|
|
|
+ private AuthenticationFailureHandler createAuthenticationFailureHandler(final Realms realms,
|
|
|
+ final SecurityExtension.SecurityComponents components) {
|
|
|
AuthenticationFailureHandler failureHandler = null;
|
|
|
String extensionName = null;
|
|
|
for (SecurityExtension extension : securityExtensions) {
|
|
|
- AuthenticationFailureHandler extensionFailureHandler = extension.getAuthenticationFailureHandler();
|
|
|
+ AuthenticationFailureHandler extensionFailureHandler = extension.getAuthenticationFailureHandler(components);
|
|
|
if (extensionFailureHandler != null && failureHandler != null) {
|
|
|
throw new IllegalStateException("Extensions [" + extensionName + "] and [" + extension.toString() + "] "
|
|
|
+ "both set an authentication failure handler");
|