diff --git a/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java b/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java index c4025739cd..28469174f1 100755 --- a/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java +++ b/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java @@ -570,7 +570,14 @@ public final class KeycloakModelUtils { return clientScope; } } - + // check if we are referencing a client instead of a scope + if (realm.getClients() != null) { + for (ClientModel client : realm.getClients()) { + if (clientScopeName.equals(client.getClientId())) { + return client; + } + } + } return null; } diff --git a/server-spi-private/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/server-spi-private/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java index 9f91721710..8294f3775d 100755 --- a/server-spi-private/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java +++ b/server-spi-private/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java @@ -660,7 +660,11 @@ public class ModelToRepresentation { List grantedClientScopes = new LinkedList<>(); for (ClientScopeModel clientScope : model.getGrantedClientScopes()) { - grantedClientScopes.add(clientScope.getName()); + if (clientScope instanceof ClientModel) { + grantedClientScopes.add(((ClientModel) clientScope).getClientId()); + } else { + grantedClientScopes.add(clientScope.getName()); + } } UserConsentRepresentation consentRep = new UserConsentRepresentation(); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportUtil.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportUtil.java index e8ae1b7276..eb27600cad 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportUtil.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportUtil.java @@ -59,6 +59,7 @@ import org.keycloak.testsuite.client.KeycloakTestingClient; import org.keycloak.testsuite.util.RealmRepUtil; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; @@ -368,7 +369,7 @@ public class ExportImportUtil { Map appAdminConsent = findConsentByClientId(consents, application.getClientId()); Assert.assertNotNull(appAdminConsent); - Assert.assertTrue(isClientScopeGranted(appAdminConsent, OAuth2Constants.OFFLINE_ACCESS)); + Assert.assertTrue(isClientScopeGranted(appAdminConsent, OAuth2Constants.OFFLINE_ACCESS, "roles", "profile", "email", "account", "web-origins")); Map otherAppAdminConsent = findConsentByClientId(consents, otherApp.getClientId());//admin.getConsentByClient(otherApp.getId()); Assert.assertFalse(isClientScopeGranted(otherAppAdminConsent, OAuth2Constants.OFFLINE_ACCESS)); @@ -392,9 +393,9 @@ public class ExportImportUtil { } - private static boolean isClientScopeGranted(Map consent, String clientScopeName) { + private static boolean isClientScopeGranted(Map consent, String... clientScopeNames) { if (consent.get("grantedClientScopes") == null) return false; - return ((List)consent.get("grantedClientScopes")).contains(clientScopeName); + return ((List)consent.get("grantedClientScopes")).containsAll(Arrays.asList(clientScopeNames)); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/model/testrealm.json b/testsuite/integration-arquillian/tests/base/src/test/resources/model/testrealm.json index 0237bf233e..6babcb0025 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/resources/model/testrealm.json +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/model/testrealm.json @@ -179,7 +179,8 @@ "grantedRealmRoles": [ "offline_access" ], "grantedClientRoles": { "Application": [ "app-admin" ] - } + }, + "grantedClientScopes" : [ "roles", "profile", "email", "account", "web-origins" ] }, { "clientId": "OtherApp", @@ -535,6 +536,4 @@ ] } - - } \ No newline at end of file