Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(jans-keycloak-integration): various runtime issues with the kc storage spi #8199 #8207

Merged
merged 4 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
package io.jans.kc.spi.storage.config;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import org.keycloak.Config;

public class PluginConfiguration {

private static final String AUTH_TOKEN_ENDPOINT_KEY = "jans-storage-auth-token-endpoint";
private static final String SCIM_USER_ENDPOINT_KEY = "jans-storage-scim-user-endpoint";
private static final String SCIM_USER_SEARCH_ENDPOINT_KEY = "jans-storage-scim-user-search-endpoint";
private static final String SCIM_OAUTH_SCOPE_KEY = "jans-storage-scim-oauth-scope";
private static final String SCIM_CLIENT_ID_KEY = "jans-storage-scim-client-id";
private static final String SCIM_CLIENT_SECRET = "jans-storage-scim-client-secret";

private static final String AUTH_TOKEN_ENDPOINT_KEY = "auth-token-endpoint";
private static final String SCIM_USER_ENDPOINT_KEY = "scim-user-endpoint";
private static final String SCIM_USER_SEARCH_ENDPOINT_KEY = "scim-user-search-endpoint";
private static final String SCIM_OAUTH_SCOPES_KEY = "scim-oauth-scopes";
private static final String SCIM_CLIENT_ID_KEY = "scim-client-id";
private static final String SCIM_CLIENT_SECRET = "scim-client-secret";
private String authTokenEndpoint;
private String scimUserEndpoint;
private String scimUserSearchEndpoint;
private String scimOauthScope;
private List<String> scimOauthScopes;
private String scimClientId;
private String scimClientSecret;

Expand All @@ -28,7 +31,11 @@ public static PluginConfiguration fromKeycloakConfiguration(Config.Scope config)
ret.authTokenEndpoint = config.get(AUTH_TOKEN_ENDPOINT_KEY);
ret.scimUserEndpoint = config.get(SCIM_USER_ENDPOINT_KEY);
ret.scimUserSearchEndpoint = config.get(SCIM_USER_SEARCH_ENDPOINT_KEY);
ret.scimOauthScope = config.get(SCIM_OAUTH_SCOPE_KEY);
ret.scimOauthScopes = new ArrayList<>();
String tmpscopes = config.get(SCIM_OAUTH_SCOPES_KEY);
if(tmpscopes != null) {
ret.scimOauthScopes = Arrays.asList(tmpscopes.split(","));
}
ret.scimClientId = config.get(SCIM_CLIENT_ID_KEY);
ret.scimClientSecret = config.get(SCIM_CLIENT_SECRET);
return ret;
Expand All @@ -50,9 +57,9 @@ public String getScimUserSearchEndpoint() {
return scimUserSearchEndpoint;
}

public String getScimOauthScope() {
public List<String> getScimOauthScopes() {

return scimOauthScope;
return scimOauthScopes;
}

public String getScimClientId() {
Expand All @@ -70,7 +77,7 @@ public boolean isValid() {
return authTokenEndpoint != null
&& scimUserEndpoint != null
&& scimUserSearchEndpoint != null
&& scimOauthScope != null
&& scimOauthScopes != null
&& scimClientId != null
&& scimClientSecret != null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public UserResource postData(String uri, String accessToken, String filter) {
HttpClient client = HttpClientBuilder.create().build();

SearchRequest searchRequest = createSearchRequest(filter);
log.debugv("ScimService::postData() - client:{0}, searchRequest:{1}, accessToken:{2}", client, searchRequest,
log.debugv("ScimService::postData() - client:{0}, searchRequest:{1}, accessToken:{2}", client, searchRequest.toString(),
accessToken);

JsonNode jsonNode = SimpleHttp.doPost(uri, client).auth(accessToken).json(searchRequest).asJson();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import java.util.Set;
import java.util.stream.Stream;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.keycloak.common.util.MultivaluedHashMap;
import org.keycloak.component.ComponentModel;
import org.keycloak.credential.LegacyUserCredentialManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import java.util.stream.*;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

Expand Down Expand Up @@ -67,16 +67,15 @@ public String getScimClientSecret() {
return pluginConfiguration.getScimClientSecret();
}

public String getScimOauthScope() {
public List<String> getScimOauthScopes() {
log.debugv("JansUtil::getScimOauthScope() - {0}",
pluginConfiguration.getScimOauthScope());
return pluginConfiguration.getScimOauthScope();
pluginConfiguration.getScimOauthScopes());
return pluginConfiguration.getScimOauthScopes();
}

public String requestScimAccessToken() throws IOException {
log.debug("JansUtil::requestScimAccessToken() ");
List<String> scopes = new ArrayList<>();
scopes.add(getScimOauthScope());
List<String> scopes = getScimOauthScopes();
String token = requestAccessToken(getScimClientId(), scopes);
log.debugv("JansUtil::requestScimAccessToken() - token:{0} ", token);
return token;
Expand Down