private OpenIdConfigurationResponse updateOpenIdConfigurationResponse(
            final AbstractOpenIdConfig abstractOpenIdConfig) {
        final String configurationEndpoint = abstractOpenIdConfig.getOpenIdConfigurationEndpoint();

        LOGGER.debug("About to get lock to update open id configuration");
        synchronized (this) {
            LOGGER.debug("Got lock");
            // Re-test under lock
            if (isFetchRequired(configurationEndpoint)) {
                try {
                    final OpenIdConfigurationResponse response = fetchOpenIdConfigurationResponse(
                            configurationEndpoint, abstractOpenIdConfig);
                    openIdConfigurationResp = mergeResponse(response, abstractOpenIdConfig);
                } catch (final RuntimeException | IOException e) {
                    LOGGER.error(e.getMessage(), e);
                }

                if (openIdConfigurationResp == null) {
                    openIdConfigurationResp = OpenIdConfigurationResponse.builder()
                            .issuer(abstractOpenIdConfig.getIssuer())
                            .authorizationEndpoint(abstractOpenIdConfig.getAuthEndpoint())
                            .tokenEndpoint(abstractOpenIdConfig.getTokenEndpoint())
                            .jwksUri(abstractOpenIdConfig.getJwksUri())
                            .logoutEndpoint(abstractOpenIdConfig.getLogoutEndpoint())
                            .build();
                }
                lastConfigurationEndpoint = configurationEndpoint;
            }
            return openIdConfigurationResp;
        }
    }
Combines the values from {@link AbstractOpenIdConfig} with values obtained from the external
Open ID Connect IDP server.
stroom-security/stroom-security-common-impl/src/main/java/stroom/security/common/impl/ExternalIdpConfigurationProvider.java