keycloak: Import Realm in Keycloak 18.0.0 - failed
Describe the bug
I’m using a docker image and I uploaded the realm.json in /opt/keycloak/data/import to get the nice auto import functionality.
When I add now to start --import-realm I get:
2022-04-26 08:28:56,195 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode
2022-04-26 08:28:56,195 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to import realm: myrealm
2022-04-26 08:28:56,195 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Script upload is disabled
which confuses me, because
Script Upload should be removed (why is import using that?) and
doesn’t work.
Without the --import-realm all works fine
Reference to documentation: https://www.keycloak.org/server/importExport
Version
18.0.0
Expected behavior
To import the realms automatically from the data/import location.
Actual behavior
Gives an error
How to Reproduce?
- create a dockerfile
- add a realm.json to the path
- build keycloak in docker file
- build dockerfile
- start container
Anything else?
No response
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 3
- Comments: 15 (7 by maintainers)
Commits related to this issue
- remove default policies from keycloack config Workaround for bug [#11664](https://github.com/keycloak/keycloak/issues/11664). — committed to mihaigiurgeanu/test-keycloack by deleted user a year ago
I had the same issue and based on your feedback I search and found I had these policies for one of the realm clients:
I checked and these were not referenced anywhere else so I proceeded to delete them and it worked.
I guess it was created automatically by a previous version of KC.
For anyone else experiencing the same issue: search for
"type": "js"to pin-point the root cause in the realm export file.Replacing the
Default Policysetting with the one below resolves the issue and maintains the expected behavior.Ah, thanks for clearing that up. But shouldn’t it be registered as a bug that when you create an export, it cannot be imported without removing this by hand (after googling for it?).
``> @edwint88 Is your realm declaring providers that rely on scripts such as mappers, authenticators, or policies?
We have an Authenticator, but not a JavaScript one. It’s a simple Java SPI that we add through .jar in
/opt/keycloak/providersand then, yes, configured in the realm.json. Is this affected too?LE: thanks for the
"type": "js"hint! we got a default policy - that we didn’t create it, I’ll check without that in the config.{ "id": "cf9f7684-45c2-4bcd-89a5-38c2a41b55fd", "name": "Default Policy", "description": "A policy that grants access only for users within this realm", "type": "js", "logic": "POSITIVE", "decisionStrategy": "AFFIRMATIVE", "config": { "code": "// by default, grants any permission associated with this policy\n$evaluation.grant();\n" } }That was the problem! So when I’ve created a dummy confidential client in 17.0.1 the Default JS policies were activated!
I agree, this issue should be re-opened, this problem still exists in keycloak 20.0
The workaround described above seems to still work (using the
quay.io/keycloak/keycloakdocker image), here is a minimal, reproducible example of the issue and the workaround:docker run --name auth1 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=12345 -it --entrypoint=/bin/bash -p 8080:8080 quay.io/keycloak/keycloak:20.0/opt/keycloak/bin/kc.sh start-devlocalhost:8080after it spins up and create the realm, users, clients, etc. as one sees fit, for this example, the realm will bemyrealm/opt/keycloak/bin/kc.sh export --realm myrealm --users same_file --file /tmp/realm-export.json.tmpexitdocker cp auth1:/tmp/realm-export.json.tmp realm-export.json.tmpimportfolder:cp realm-export.json.tmp import/realm-export.jsonjqto avoid editing by hand:cat realm-export.json.tmp | jq 'del(.clients[].authorizationSettings.policies)' > import/realm-export.jsondocker run --name auth2 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=12345 -v $(pwd)/import/:/opt/keycloak/data/import/:ro --rm -p 8080:8080 quay.io/keycloak/keycloak:20.0 start-dev --import-realm@edwint88 Is your realm declaring providers that rely on scripts such as mappers, authenticators, or policies?
If so, the realm configuration is now invalid and you should not be able to import. See the note here about the removal of the
upload-scriptsfeature.@edwint88 @yangboyd I’m working on it. Can we discuss this issue at https://github.com/keycloak/keycloak/issues/16074?
And also here: https://keycloak.discourse.group/t/import-realm-in-keycloak-18-0-0-failed/15166
Linking this discussion I opened a few ago: https://github.com/keycloak/keycloak/discussions/11658