KEYCLOAK-8530 KEYCLOAK-8531 Fix MigrationTest and migration from 2.5.5.Final and 3.4.3.Final

This commit is contained in:
mposolda 2018-10-12 12:00:55 +02:00 committed by Marek Posolda
parent 5f0424fb11
commit 60a8267576
6 changed files with 61 additions and 655 deletions

View file

@ -252,10 +252,9 @@ This test will:
mvn -f testsuite/integration-arquillian/pom.xml \ mvn -f testsuite/integration-arquillian/pom.xml \
clean install \ clean install \
-Pauth-server-wildfly,jpa,clean-jpa,auth-server-migration \ -Pauth-server-wildfly,jpa,clean-jpa,auth-server-migration,test-70-migration \
-Dtest=MigrationTest \ -Dtest=MigrationTest \
-Dmigration.mode=auto \ -Dmigration.mode=auto \
-Dmigrated.auth.server.version=1.9.8.Final \
-Djdbc.mvn.groupId=mysql \ -Djdbc.mvn.groupId=mysql \
-Djdbc.mvn.version=5.1.29 \ -Djdbc.mvn.version=5.1.29 \
-Djdbc.mvn.artifactId=mysql-connector-java \ -Djdbc.mvn.artifactId=mysql-connector-java \
@ -263,6 +262,11 @@ This test will:
-Dkeycloak.connectionsJpa.user=keycloak \ -Dkeycloak.connectionsJpa.user=keycloak \
-Dkeycloak.connectionsJpa.password=keycloak -Dkeycloak.connectionsJpa.password=keycloak
The profile "test-7X-migration" indicates from which version you want to test migration. The valid values are:
* test-70-migration - indicates migration from RHSSO 7.0 (Equivalent to Keycloak 1.9.8.Final)
* test-71-migration - indicates migration from RHSSO 7.1 (Equivalent to Keycloak 2.5.5.Final)
* test-72-migration - indicates migration from RHSSO 7.2 (Equivalent to Keycloak 3.4.3.Final)
### DB migration test with manual mode ### DB migration test with manual mode
Same test as above, but it uses manual migration mode. During startup of the new Keycloak server, Liquibase won't automatically perform DB update, but it Same test as above, but it uses manual migration mode. During startup of the new Keycloak server, Liquibase won't automatically perform DB update, but it
@ -274,10 +278,9 @@ just exports the needed SQL into the script. This SQL script then needs to be ma
mvn -f testsuite/integration-arquillian/pom.xml \ mvn -f testsuite/integration-arquillian/pom.xml \
clean install \ clean install \
-Pauth-server-wildfly,jpa,clean-jpa,auth-server-migration \ -Pauth-server-wildfly,jpa,clean-jpa,auth-server-migration,test-70-migration \
-Dtest=MigrationTest \ -Dtest=MigrationTest \
-Dmigration.mode=manual \ -Dmigration.mode=manual \
-Dmigrated.auth.server.version=1.9.8.Final \
-Djdbc.mvn.groupId=mysql \ -Djdbc.mvn.groupId=mysql \
-Djdbc.mvn.version=5.1.29 \ -Djdbc.mvn.version=5.1.29 \
-Djdbc.mvn.artifactId=mysql-connector-java \ -Djdbc.mvn.artifactId=mysql-connector-java \
@ -293,10 +296,9 @@ just exports the needed SQL into the script. This SQL script then needs to be ma
mvn -f testsuite/integration-arquillian/tests/base/pom.xml \ mvn -f testsuite/integration-arquillian/tests/base/pom.xml \
clean install \ clean install \
-Pauth-server-wildfly \ -Pauth-server-wildfly,test-70-migration \
-Dskip.add.user.json=true \ -Dskip.add.user.json=true \
-Dmigrated.auth.server.version=1.9.8.Final \ -Dtest=MigrationTest
-Dtest=MigrationTest
### JSON export/import migration test ### JSON export/import migration test
This will start latest Keycloak and import the realm JSON file, which was previously exported from Keycloak 1.9.8.Final This will start latest Keycloak and import the realm JSON file, which was previously exported from Keycloak 1.9.8.Final
@ -304,10 +306,9 @@ This will start latest Keycloak and import the realm JSON file, which was previo
mvn -f testsuite/integration-arquillian/pom.xml \ mvn -f testsuite/integration-arquillian/pom.xml \
clean install \ clean install \
-Pauth-server-wildfly,migration-import \ -Pauth-server-wildfly,migration-import,test-70-migration \
-Dtest=MigrationTest \ -Dtest=MigrationTest \
-Dmigration.mode=import \ -Dmigration.mode=import
-Dmigrated.auth.server.version=1.9.8.Final
## Server configuration migration test ## Server configuration migration test

View file

@ -71,8 +71,9 @@
<!--migration properties--> <!--migration properties-->
<migration.70.version>1.9.8.Final</migration.70.version> <migration.70.version>1.9.8.Final</migration.70.version>
<migration.70.authz.version>2.2.1.Final</migration.70.authz.version>
<migration.71.version>2.5.5.Final</migration.71.version> <migration.71.version>2.5.5.Final</migration.71.version>
<migration.72.version>3.4.3.Final</migration.72.version>
<google.guava.version>23.0</google.guava.version> <google.guava.version>23.0</google.guava.version>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
@ -280,26 +281,6 @@
</pluginManagement> </pluginManagement>
</build> </build>
</profile> </profile>
<profile>
<id>test-70-authz-migration</id>
<properties>
<migrated.auth.server.version>${migration.70.authz.version}</migrated.auth.server.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile> <profile>
<id>test-71-migration</id> <id>test-71-migration</id>
<properties> <properties>
@ -320,6 +301,26 @@
</pluginManagement> </pluginManagement>
</build> </build>
</profile> </profile>
<profile>
<id>test-72-migration</id>
<properties>
<migrated.auth.server.version>${migration.72.version}</migrated.auth.server.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles> </profiles>
</project> </project>

View file

@ -91,9 +91,4 @@ public class MigrationTest extends AbstractMigrationTest {
testMigrationTo4_x(false, false); testMigrationTo4_x(false, false);
} }
@Test
@Migration(versionFrom = "2.2.1.Final")
public void migrationInAuthorizationServicesTest() {
testDroolsToRulesPolicyTypeMigration();
}
} }

View file

@ -1,615 +0,0 @@
{
"id": "authorization",
"realm": "authorization",
"clients": [
{
"id": "0bd13931-f428-44e6-96ee-18ba82a6243d",
"clientId": "photoz-restful-api",
"baseUrl": "/photoz-restful-api",
"surrogateAuthRequired": false,
"enabled": true,
"clientAuthenticatorType": "client-secret",
"secret": "secret",
"redirectUris": [
"/photoz-restful-api/*"
],
"webOrigins": [
"*"
],
"notBefore": 0,
"bearerOnly": false,
"consentRequired": false,
"standardFlowEnabled": true,
"implicitFlowEnabled": false,
"directAccessGrantsEnabled": false,
"serviceAccountsEnabled": true,
"authorizationServicesEnabled": true,
"publicClient": false,
"frontchannelLogout": false,
"attributes": {},
"fullScopeAllowed": true,
"nodeReRegistrationTimeout": -1,
"protocolMappers": [
{
"id": "71c43c1d-daee-41d5-87a9-ee8ab49e2f80",
"name": "email",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-property-mapper",
"consentRequired": true,
"consentText": "${email}",
"config": {
"userinfo.token.claim": "true",
"user.attribute": "email",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "email",
"jsonType.label": "String"
}
},
{
"id": "18778057-3bd3-4775-84d5-93581c720854",
"name": "full name",
"protocol": "openid-connect",
"protocolMapper": "oidc-full-name-mapper",
"consentRequired": true,
"consentText": "${fullName}",
"config": {
"id.token.claim": "true",
"access.token.claim": "true"
}
},
{
"id": "e6a5752b-db2c-4df4-a321-e0c2736a6a84",
"name": "given name",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-property-mapper",
"consentRequired": true,
"consentText": "${givenName}",
"config": {
"userinfo.token.claim": "true",
"user.attribute": "firstName",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "given_name",
"jsonType.label": "String"
}
},
{
"id": "46802dfe-5937-4f49-9a57-6e8b2309141b",
"name": "family name",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-property-mapper",
"consentRequired": true,
"consentText": "${familyName}",
"config": {
"userinfo.token.claim": "true",
"user.attribute": "lastName",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "family_name",
"jsonType.label": "String"
}
},
{
"id": "d0989fb6-45fc-4722-8940-0357c9030016",
"name": "role list",
"protocol": "saml",
"protocolMapper": "saml-role-list-mapper",
"consentRequired": false,
"config": {
"single": "false",
"attribute.nameformat": "Basic",
"attribute.name": "Role"
}
},
{
"id": "980ec856-fea0-4631-a729-4d1a246b7e13",
"name": "username",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-property-mapper",
"consentRequired": true,
"consentText": "${username}",
"config": {
"userinfo.token.claim": "true",
"user.attribute": "username",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "preferred_username",
"jsonType.label": "String"
}
}
],
"useTemplateConfig": false,
"useTemplateScope": false,
"useTemplateMappers": false,
"authorizationSettings": {
"allowRemoteResourceManagement": true,
"policyEnforcementMode": "ENFORCING",
"resources": [
{
"name": "User Profile Resource",
"uri": "/profile",
"type": "http://photoz.com/profile",
"scopes": [
{
"name": "urn:photoz.com:scopes:profile:view"
}
]
},
{
"name": "Album Resource",
"uri": "/album/*",
"type": "http://photoz.com/album",
"scopes": [
{
"name": "urn:photoz.com:scopes:album:view"
},
{
"name": "urn:photoz.com:scopes:album:create"
},
{
"name": "urn:photoz.com:scopes:album:delete"
}
]
},
{
"name": "Admin Resources",
"uri": "/admin/*",
"type": "http://photoz.com/admin",
"scopes": [
{
"name": "urn:photoz.com:scopes:album:admin:manage"
}
]
}
],
"policies": [
{
"name": "Only Owner Policy",
"description": "Defines that only the resource owner is allowed to do something",
"type": "drools",
"logic": "POSITIVE",
"decisionStrategy": "UNANIMOUS",
"config": {
"mavenArtifactVersion": "${project.version}",
"mavenArtifactId": "photoz-authz-policy",
"sessionName": "MainOwnerSession",
"mavenArtifactGroupId": "org.keycloak",
"moduleName": "PhotozAuthzOwnerPolicy",
"scannerPeriod": "1",
"scannerPeriodUnit": "Hours"
}
}
],
"scopes": [
{
"name": "urn:photoz.com:scopes:profile:view"
},
{
"name": "urn:photoz.com:scopes:album:view"
},
{
"name": "urn:photoz.com:scopes:album:create"
},
{
"name": "urn:photoz.com:scopes:album:delete"
},
{
"name": "urn:photoz.com:scopes:album:admin:manage"
}
]
}
}
],
"clientTemplates": [],
"browserSecurityHeaders": {
"xContentTypeOptions": "nosniff",
"xFrameOptions": "SAMEORIGIN",
"contentSecurityPolicy": "frame-src 'self'"
},
"smtpServer": {},
"eventsEnabled": false,
"eventsListeners": [
"jboss-logging"
],
"enabledEventTypes": [],
"adminEventsEnabled": false,
"adminEventsDetailsEnabled": false,
"components": {},
"internationalizationEnabled": false,
"supportedLocales": [],
"authenticationFlows": [
{
"id": "efc32428-2d66-4eab-9c72-3d3072bfe123",
"alias": "Handle Existing Account",
"description": "Handle what to do if there is existing account with same email/username like authenticated identity provider",
"providerId": "basic-flow",
"topLevel": false,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "idp-confirm-link",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "idp-email-verification",
"requirement": "ALTERNATIVE",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"requirement": "ALTERNATIVE",
"priority": 30,
"flowAlias": "Verify Existing Account by Re-authentication",
"userSetupAllowed": false,
"autheticatorFlow": true
}
]
},
{
"id": "9e760226-9a88-4fc8-adb0-db9c39cdcbc9",
"alias": "Verify Existing Account by Re-authentication",
"description": "Reauthentication of existing account",
"providerId": "basic-flow",
"topLevel": false,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "idp-username-password-form",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "auth-otp-form",
"requirement": "OPTIONAL",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "f8b31433-d2b0-424a-b800-cc20e7276113",
"alias": "browser",
"description": "browser based authentication",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "auth-cookie",
"requirement": "ALTERNATIVE",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "auth-spnego",
"requirement": "DISABLED",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "identity-provider-redirector",
"requirement": "ALTERNATIVE",
"priority": 25,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"requirement": "ALTERNATIVE",
"priority": 30,
"flowAlias": "forms",
"userSetupAllowed": false,
"autheticatorFlow": true
}
]
},
{
"id": "d616b91c-5e69-4792-a770-41bdbfeca227",
"alias": "clients",
"description": "Base authentication for clients",
"providerId": "client-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "client-secret",
"requirement": "ALTERNATIVE",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "client-jwt",
"requirement": "ALTERNATIVE",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "7be60a19-1b3e-4255-9ce5-44fa90694e4e",
"alias": "direct grant",
"description": "OpenID Connect Resource Owner Grant",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "direct-grant-validate-username",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "direct-grant-validate-password",
"requirement": "REQUIRED",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "direct-grant-validate-otp",
"requirement": "OPTIONAL",
"priority": 30,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "ac2fe144-8e41-4c59-be25-38532b7fdc7b",
"alias": "first broker login",
"description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticatorConfig": "review profile config",
"authenticator": "idp-review-profile",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticatorConfig": "create unique user config",
"authenticator": "idp-create-user-if-unique",
"requirement": "ALTERNATIVE",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"requirement": "ALTERNATIVE",
"priority": 30,
"flowAlias": "Handle Existing Account",
"userSetupAllowed": false,
"autheticatorFlow": true
}
]
},
{
"id": "024d04a3-e497-429b-9599-c7baadb1ddbc",
"alias": "forms",
"description": "Username, password, otp and other auth forms.",
"providerId": "basic-flow",
"topLevel": false,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "auth-username-password-form",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "auth-otp-form",
"requirement": "OPTIONAL",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "0d08b35b-3aa9-4291-baf2-fd272113bdf5",
"alias": "registration",
"description": "registration flow",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "registration-page-form",
"requirement": "REQUIRED",
"priority": 10,
"flowAlias": "registration form",
"userSetupAllowed": false,
"autheticatorFlow": true
}
]
},
{
"id": "85945bc3-661b-4c0b-bb38-415e71c858d6",
"alias": "registration form",
"description": "registration form",
"providerId": "form-flow",
"topLevel": false,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "registration-user-creation",
"requirement": "REQUIRED",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "registration-profile-action",
"requirement": "REQUIRED",
"priority": 40,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "registration-password-action",
"requirement": "REQUIRED",
"priority": 50,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "registration-recaptcha-action",
"requirement": "DISABLED",
"priority": 60,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "0603f7b0-5da7-4f06-a5b9-f74b996e6e4a",
"alias": "reset credentials",
"description": "Reset credentials for a user if they forgot their password or something",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "reset-credentials-choose-user",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "reset-credential-email",
"requirement": "REQUIRED",
"priority": 20,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "reset-password",
"requirement": "REQUIRED",
"priority": 30,
"userSetupAllowed": false,
"autheticatorFlow": false
},
{
"authenticator": "reset-otp",
"requirement": "OPTIONAL",
"priority": 40,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
},
{
"id": "2053759f-2888-488d-bde2-17470e18973d",
"alias": "saml ecp",
"description": "SAML ECP Profile Authentication Flow",
"providerId": "basic-flow",
"topLevel": true,
"builtIn": true,
"authenticationExecutions": [
{
"authenticator": "http-basic-authenticator",
"requirement": "REQUIRED",
"priority": 10,
"userSetupAllowed": false,
"autheticatorFlow": false
}
]
}
],
"authenticatorConfig": [
{
"id": "e8986891-5123-489c-8693-062442567069",
"alias": "create unique user config",
"config": {
"require.password.update.after.registration": "false"
}
},
{
"id": "6ad5443c-6b33-4507-a339-e0399c3e5a59",
"alias": "review profile config",
"config": {
"update.profile.on.first.login": "missing"
}
}
],
"requiredActions": [
{
"alias": "CONFIGURE_TOTP",
"name": "Configure OTP",
"providerId": "CONFIGURE_TOTP",
"enabled": true,
"defaultAction": false,
"config": {}
},
{
"alias": "UPDATE_PASSWORD",
"name": "Update Password",
"providerId": "UPDATE_PASSWORD",
"enabled": true,
"defaultAction": false,
"config": {}
},
{
"alias": "UPDATE_PROFILE",
"name": "Update Profile",
"providerId": "UPDATE_PROFILE",
"enabled": true,
"defaultAction": false,
"config": {}
},
{
"alias": "VERIFY_EMAIL",
"name": "Verify Email",
"providerId": "VERIFY_EMAIL",
"enabled": true,
"defaultAction": false,
"config": {}
},
{
"alias": "terms_and_conditions",
"name": "Terms and Conditions",
"providerId": "terms_and_conditions",
"enabled": false,
"defaultAction": false,
"config": {}
}
],
"browserFlow": "browser",
"registrationFlow": "registration",
"directGrantFlow": "direct grant",
"resetCredentialsFlow": "reset credentials",
"clientAuthenticationFlow": "clients",
"attributes": {
"_browser_header.xFrameOptions": "SAMEORIGIN",
"failureFactor": "30",
"quickLoginCheckMilliSeconds": "1000",
"maxDeltaTimeSeconds": "43200",
"_browser_header.xContentTypeOptions": "nosniff",
"bruteForceProtected": "false",
"maxFailureWaitSeconds": "900",
"_browser_header.contentSecurityPolicy": "frame-src 'self'",
"minimumQuickLoginWaitSeconds": "60",
"waitIncrementSeconds": "60"
},
"keycloakVersion": "2.2.1.Final"
}

View file

@ -2560,7 +2560,7 @@
"standardFlowEnabled" : true, "standardFlowEnabled" : true,
"implicitFlowEnabled" : false, "implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false, "directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false, "serviceAccountsEnabled" : true,
"publicClient" : false, "publicClient" : false,
"frontchannelLogout" : false, "frontchannelLogout" : false,
"attributes" : { }, "attributes" : { },
@ -2651,7 +2651,32 @@
} ], } ],
"useTemplateConfig" : false, "useTemplateConfig" : false,
"useTemplateScope" : false, "useTemplateScope" : false,
"useTemplateMappers" : false "useTemplateMappers" : false,
"authorizationServicesEnabled": true,
"authorizationSettings": {
"resources": [
{
"name": "group.resource.a",
"scopes": ["view-members"]
},
{
"name": "group.resource.b",
"scopes": ["view-members"]
},
{
"name": "group.resource.c",
"scopes": ["view-members"]
},
{
"name": "group.resource.d",
"scopes": ["view-members"]
},
{
"name": "group.resource.e",
"scopes": ["view-members"]
}
]
}
}, { }, {
"id" : "401e0c86-afd1-4f4f-8322-32b05222bd06", "id" : "401e0c86-afd1-4f4f-8322-32b05222bd06",
"clientId" : "security-admin-console", "clientId" : "security-admin-console",

View file

@ -766,7 +766,7 @@
"standardFlowEnabled" : true, "standardFlowEnabled" : true,
"implicitFlowEnabled" : false, "implicitFlowEnabled" : false,
"directAccessGrantsEnabled" : false, "directAccessGrantsEnabled" : false,
"serviceAccountsEnabled" : false, "serviceAccountsEnabled" : true,
"publicClient" : false, "publicClient" : false,
"frontchannelLogout" : false, "frontchannelLogout" : false,
"protocol" : "openid-connect", "protocol" : "openid-connect",
@ -859,7 +859,6 @@
"useTemplateConfig" : false, "useTemplateConfig" : false,
"useTemplateScope" : false, "useTemplateScope" : false,
"useTemplateMappers" : false, "useTemplateMappers" : false,
"serviceAccountsEnabled": true,
"authorizationServicesEnabled": true, "authorizationServicesEnabled": true,
"authorizationSettings": { "authorizationSettings": {
"resources": [ "resources": [