Giter VIP home page Giter VIP logo

scim-for-keycloak's Introduction

End of Life

The SCIM for Keycloak Open Source project has reached its end of life. For SCIM support on Keycloak see: https://scim-for-keycloak.de/

SCIM for Keycloak website online

The website to get access to the SCIM for Keycloak project is online. You can access it under: https://scim-for-keycloak.de/

Branch Circle CI Status
master build deactivated due to build problem on circle-ci. But the current version is still stable

Donations

If you like this work and want to support me you'll be able to treat me to a cup of coffee :-)

Donate

What is SCIM-for-keycloak?

It is a full SCIM implementation that is easily integrated into keycloak and is also easily configurable within the web admin console.

It grants you interoperable User, Group and Role provisioning by using a defined standard for resource managing:

See:

An example is user and group synchronizing with Microsoft Azure AD. A manual that describes how to do this can be found in the wiki:

Use with Microsoft Azure AD Thanks to Raffael Grob for providing this manual.

Keycloak support matrix

version supported scim-for-keycloak version SCIM-SDK Version
lower -
9.0.x You may find an older working version at https://github.com/Captain-P-Goldfish/SCIM-SDK
10.0.x You may find an older working version at https://github.com/Captain-P-Goldfish/SCIM-SDK
11.0.x ✔️ kc-11-b1 1.8.3
12.0.x ✔️ kc-12-b1 1.8.3
12.0.x ✔️ kc-12-b2 1.9.2
13.0.0 ✔️ kc-13-b1 1.9.2
13.0.1 ✔️ kc-13-b2 1.11.0
13.0.1 ✔️ kc-13-b3 1.11.0
13.0.1 ✔️ kc-13-b4 1.11.0
14.0.0 ✔️ kc-14-b1 1.11.0
14.0.0 ✔️ kc-14-b2 1.11.0
14.0.x ✔️ kc-14-b3 1.11.0
15.0.x ✔️ kc-15-b1 1.12.0
15.0.x ✔️ kc-15-b2 1.12.1
15.0.x ✔️ kc-15-b3 1.12.1
16.0.x kc-16-b1 (BROKEN -(due to missing theme files) 1.12.3
16.0.x ✔️ kc-16-b2 1.12.3
16.1.x kc-16-b3 (BROKEN - due to liquibase problem) 1.12.4
16.1.x ✔️ kc-16-b4 1.12.4
17.0.x
18.0.x ✔️ kc-18-b1 1.13.4
18.0.x / 19.0.x ✔️ kc-18-b2 1.13.4
19.0.x ✔️ kc-19-b1 1.17.1
20.0.x ✔️ kc-20-b1 1.17.1-kc
21.0.x The Open Source project reached end of life with kc-21. Please refer to
the enterprise version for upcoming releases. See above
-

Versioning

This project will use the following versioning pattern

kc-${keycloak.version}-b${project.incremental.version}

Releases

Starting with version kc-16-b1 I will upload the built artifacts to github into the release section. Any previous versions must still be build manually as described below.

Release Notes

To see the current release-notes take a look into the release section: https://github.com/Captain-P-Goldfish/scim-for-keycloak/releases

How to build

You need a git, JDK and maven installation on your computer. A manual in how to prepare java and maven for non-java-developers can be found in the wiki: https://github.com/Captain-P-Goldfish/scim-for-keycloak/wiki/Manual:-building-scim-for-keycloak-with-java-and-maven

Checkout the git tag that you want to build:

  1. list all available tags: git tag -l *
  2. checkout the tag you want to build git checkout tags/${tag-name}
  3. build with maven
    • cd ${SCIM_FOR_KEYCLOAK_HOME}
    • mvn clean package -DskipTests
  4. find the scim-for-keycloak artifact in: scim-for-keycloak/scim-for-keycloak-server/target/scim-for-keycloak-kc-${keycloak.version}-b${project.incremental.version}.jar

Deploy into keycloak server

Add the artifact to the keycloak providers directory ${keycloak.home}/providers and execute in ${keycloak.home}/bin the command kc.sh build to install the provider

Security Considerations

If you open up the SCIM endpoints to a specific realm make sure you setup access rights properly because access is by default granted to all clients and to all users. This is of course a problematic behaviour in a real world scenario, so you should restrict the access to specific clients and to users with specific roles as described in chapter What is configurable?

How to configure the SCIM endpoints

  1. Deploy the scim-for-keycloak.jar file into your server. If the server is currently running you need to restart it!
  2. Now open the web admin console of keycloak open the realm settings and select the Themes tab and select the scim theme for the admin console. Now reload the browser page and the SCIM menu link should be visible. theme-settings
  3. The SCIM endpoints will be deactivated by default. To activate it for a realm toggle the "SCIM enabled" switch under the SCIM menu link.

Disabled by default

Earlier versions of scim-for-keycloak (kc-13-b2 and before and kc-14-b1) did enable the SCIM endpoints by default. The newer versions will have them disabled by default.

What is configurable?

  1. Select the SCIM link and you should see the following view:
    theme-settings
  2. You can enable SCIM for each realm separately and the ServiceProvider configurations as defined in RFC7643
  3. You may restrict access to the SCIM-endpoints for each separate realm by allowing users only access if they have been identified by a specific client. If no clients are selected any client is authorized to access the SCIM endpoints
    theme-settings
  4. You get an overview for all registered ResourceTypes and may configure them separately.
    theme-settings
    You may have noticed that a 3rd ResourceType with name RealmRole is present that is not defined by RFC7643. This ResourceType is a custom endpoint that acts as showcase to demonstrate how easy it is to extend the API with new endpoints. This endpoint provides support for adding new RealmRoles and associate them with either Groups or Users.
  5. Each endpoint provides several settings that can be configured:
    theme-settings
    You'll be able to change the description of an endpoint, disable a specific ResourceType or just prevent that new resources are created, deleted, updated or read.
  6. You can turn off the requirement for authentication on each ResourceType but not for specific ResourceType-endpoints.
  7. You'll be able to set required roles for each ResourceType and each ResourceType-endpoint [create, get , list, update, delete] . If no roles are applied to an endpoint the API will assume the authorization to be disabled. theme-settings
    The role settings are of course only respected if authentication is enabled.

Admin-Events (kc-13-b3, kc-14-b2+)

If admin events are enabled the SCIM endpoint implementations will fire admin events of the following types:

  • User [CREATE, UPDATE, DELETE]
  • Group [CREATE, UPDATE, DELETE]
    • User GroupMembership [CREATE, DELETE]
    • Group GroupMembership [CREATE, DELETE]
  • RealmRole [CREATE, UPDATE, DELETE]

Any event that triggers a GroupMembership change will also cause either a Group_Create event or a Group_Update event depending on the fact if the resource is getting created or updated.

Disadvantages

  1. I didn't find a really good way in storing multi-valued-complex structures in the user-attributes table so I stored such data structures in pure json in this table. Please note that the values in the screenshot are simply auto-generated test-values. theme-settings
  2. User loading and filtering is not implemented on database level meaning that a "list-Users"-request will currently retrieve all Users of the used realm from the database. Filtering, sorting and limiting of the returned entries will be done on API level by the SCIM-SDK. (personal tests have shown that this is still pretty fast with at least 5000 Users. I never tried more)

Grant management-access for configuration

In some cases you might want to have several administration users that will only be able to configure the SCIM environment of a single realm. In such a case the user must have specific roles that will grant access to configure the SCIM environment. If the user does not have the corresponding role the "SCIM"-menu entry will not be visible to this user.

NOTE: Do not get confused with the roles here. These roles are only for accessing the management in the keycloak web admin console. These roles have nothing to do with accessing the SCIM-endpoints.

Two different roles are required to access the "SCIM"-menu.

  1. view-realm (allows the user to see the "SCIM"-menu item on the left)
  2. scim-admin (allows the user to modify the SCIM configuration)

The "scim-admin" role exists several times for several clients.

  1. For each realm that is created a new "master-client" for this realm is added to the "master" realm. Each of these clients will get the "scim-admin" role that is needed for users from the "master" realm to access the "SCIM"-menu. So if you create a realm with name "test" you will be able to find a client with name "test-realm" within the clients section of the "master" realm. The "scim-admin" role of this client is needed to modify the data of the SCIM environment in the "test" realm for users of realm "master".

  2. If a new realm "test" is created you should be able to find a client in the clients section of realm "test" with name "realm-management". This client should have the client-role "scim-admin". Grant this role to users of realm "test" to grant access to the SCIM configuration for this realm.

  3. The last case is the SCIM configuration for realm "master". This works analogous to 2. But for realm "master" the name of the "master-client" is "master-realm" instead of "realm-management".

So in total we got 2 different cases:

  1. users of realm "master" are able to get access to SCIM configurations of several realms.
  2. users of other realms can only access the SCIM configuration of their own realm.

theme-settings
theme-settings
theme-settings

scim-for-keycloak's People

Contributors

captain-p-goldfish avatar dependabot[bot] avatar mkg20001 avatar msiegenthaler avatar philleonard avatar rudolficzek avatar saplleveni avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scim-for-keycloak's Issues

Version kc-11-b2 has problems with JPA

Found bug in kc-11-b2. Tab SCIM doesn't open and shows error. In logs found an error like "org.keycloak.models.ModelException: java.lang.IllegalArgumentException: Type specified for TypedQuery [de.captaingoldfish.scim.sdk.keycloak.entities.ScimServiceProviderEntity] is incompatible with query return type [class de.captaingoldfish.scim.sdk.keycloak.entities.ScimServiceProviderEntity]". After debugging code found out that it appears in de.captaingoldfish.scim.sdk.keycloak.services.ScimServiceProviderService on line 190. @Captain-P-Goldfish What should i do to fix it?

Provide a local XSD file for liquibase schema

Currently, liquibase tries to resolve the schema from the db-changes XML file. In general it is ok, that this is performed, but I believe for a security system like Keycloak, it is better to provide a local copy of the XSD schema instead of letting the component to access a resource from the Internet.

You already got this problem reported in #40, but I believe it is more stable to have the version offline.

For example, liquibase changed some addresses as described here: liquibase/liquibase#2448 or liquibase/liquibase#1153.

To make your code independent from liquibase server setup, see the hint posted here:
liquibase/liquibase#1153 (comment)

scim-for-keycloak-kc-18-b1 error: Cannot invoke "javax.persistence.EntityManagerFactory.createEntityManager(javax.persistence.SynchronizationType)" because "emf" is null

Hello,
I have keycloak version 18.0.2. I have installed the scim-for-keycloak-kc-18-b1 plugin per the instructions listed on https://github.com/Captain-P-Goldfish/scim-for-keycloak. (By the way, the readme says the artifact from scim-for-keycloak-server/target is an EAR file but in reality it is a jar file.)
When I try to start keycloak after installing the provider, I get an error and keycloak fails to start:

2022-08-17 17:58:35,994 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (development) mode 2022-08-17 17:58:35,994 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Cannot invoke "javax.persistence.EntityManagerFactory.createEntityManager(javax.persistence.SynchronizationType)" because "emf" is null

kc.sh show-config output is this:

Current Mode: development Runtime Configuration: kc.cache = local (PersistedConfigSource) kc.config.args = show-config (SysPropConfigSource) kc.db = mysql (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.db-password = ******* (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.db-url = jdbc:mysql://localhost:3306/annakeycloak (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.db-username = root (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.health-enabled = true (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.home.dir = ./../ (SysPropConfigSource) kc.http-enabled = false (PropertiesConfigSource[source=jar:file:///Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/lib/lib/main/org.keycloak.keycloak-quarkus-server-18.0.2.jar!/META-INF/keycloak.conf]) kc.http-relative-path = / (PersistedConfigSource) kc.log-console-output = default (PropertiesConfigSource[source=jar:file:///Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/lib/lib/main/org.keycloak.keycloak-quarkus-server-18.0.2.jar!/META-INF/keycloak.conf]) kc.log-file = ./../data/log/keycloak.log (PropertiesConfigSource[source=jar:file:///Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/lib/lib/main/org.keycloak.keycloak-quarkus-server-18.0.2.jar!/META-INF/keycloak.conf]) kc.metrics-enabled = true (PropertiesConfigSource[source=file:/Users/annanicotera/Documents/Anna/tools/keycloak-18.0.2/bin/./../conf/keycloak.conf]) kc.profile = dev (PersistedConfigSource) kc.provider.file.scim-for-keycloak-kc-18-b1.jar.last-modified = 1660782036013 (PersistedConfigSource) kc.quarkus-properties-enabled = false (PersistedConfigSource) kc.show.config = none (SysPropConfigSource) kc.version = 18.0.2 (SysPropConfigSource)
Any ideas on how I can solve this problem? Thanks in advance.

Keycloak 15: Menu isn't there

I've built and deployed kc-14-b3 and installed the .ear file

There are logs that say that it's loading the module

Aug 02 21:26:41 xstage standalone.sh[337787]: 21:26:41,689 WARN  [org.jboss.as.dependency.private] (MSC service thread 1-1) WFLYSRV0018: Deployment "deployment.s4yrny2n5d7yi9kv4vbhjwri55yc4dfr-scim-for-keycloak-kc-14-b3.ear.scim-for-keycloak-server.jar" is using a private module ("org.keycloak.keycloak-services") which may be changed or removed in future versions without notice.

But still the menu isn't there

image

Might be a change that is required for keycloak 15 support?

Assigning group to user

Hi,
Regarding adding members to group, we can do it using Patch request right, but its not with put (updating the group) or post(creating the group). is it has any reason? and also can we add extra parameters to create user request body ?

Provide binaries for releases.

Hi,

is there a reason why you don't provide a packaged EAR of the library?

I could easily provide you some GitHub Action script which would at least build the latest master/develop branch. In the same time, I could tell you how to publish it to OSS Maven Central.

What do you think?

Cheers,

Simon

META-INF/scim-changelog.xml::scim-sdk-1.0::pascal knueppel was: 7:54900cba59debc2ce8fe7a3a8067e8b2 but is now: 8:fc78a5690c6c0f158148d1e19cdc6f22

I'm getting the following error

Aug 25 14:30:19 xstage keycloak-start[1279973]: 2022-08-25 14:30:19,485 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode
Aug 25 14:30:19 xstage keycloak-start[1279973]: 2022-08-25 14:30:19,485 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: liquibase.exception.ValidationFailedException: Validation Failed:
Aug 25 14:30:19 xstage keycloak-start[1279973]:      1 change sets check sum
Aug 25 14:30:19 xstage keycloak-start[1279973]:           META-INF/scim-changelog.xml::scim-sdk-1.0::pascal knueppel was: 7:54900cba59debc2ce8fe7a3a8067e8b2 but is now: 8:fc78a5690c6c0f158148d1e19cdc6f22
Aug 25 14:30:19 xstage keycloak-start[1279973]: 2022-08-25 14:30:19,485 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Validation Failed:
Aug 25 14:30:19 xstage keycloak-start[1279973]:      1 change sets check sum
Aug 25 14:30:19 xstage keycloak-start[1279973]:           META-INF/scim-changelog.xml::scim-sdk-1.0::pascal knueppel was: 7:54900cba59debc2ce8fe7a3a8067e8b2 but is now: 8:fc78a5690c6c0f158148d1e19cdc6f22
Aug 25 14:30:19 xstage keycloak-start[1279973]: 2022-08-25 14:30:19,485 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.

Not sure what to do. Where did I mess up?

Basic authentication for SCIM endpoints

Hi @Captain-P-Goldfish,
I have a stupid question (or I hope that can be stupid 😓 ), is there the possibility to call the SCIM's endpoint with basic authentication?

for example curl -XGET http://localhost:8080/auth/realms/test/scim/v2/Groups -u admin:password ?

It could be very useful

Thanks again

JVM Ouf Of Memory error

Hello,

We got an error after installing the plugin, and we don't know if it's the source plugin.

Have you ever encountered these errors?

image006 (1)

image008

Thanks for your reply.

PS : We have these errors on the Keycloak server.

BR,

SCIM-bulk create user

Hi,
Iam calling bulk users api for creating users, so if a user is already exists, response coming as 409 and next users are not creating and returing the response till that. For example iam sending 10 users in bulk request and 5th user is already exists, then returing response there and request not executing from 6th record onwards. Iam expecting like if 409 is coming also it should create next users. Could you help on me this

Keycloak 19 - Issue with Theming when SCIM is enabled

Tried to enable SCIM functionality/theme in Keycloak 19 version and observed the following

image

Post applying SCIM theme and refresh the page

image

Clicking on "Go to the home page>> ", theme is reverted to Keycloak 18 version.

image

Note:
This is not a show-stopper/blocker, it is just about theme.

Does scim-for-keycloak rise keycloak events when provisions new user or updates group members etc?

Hello,

I'm not sure is this the right place to ask this question, but I would like to ask does scim-for-keycloak rise keycloak events when provision new user or updates group members? Is there some extra configuration which I am missing? I can see those activities in the logs but no any admin event. I am publishing all keycloak admin events to RabbitMQ queue and would like to be able to react to those events.
Thank you in advance for you answer :)

Azure AD group member patch add issue

Azure AD group membership from PATCH requests look like they are not being handled as the memberships are not updating in keycloak and the admin events aren't being added.

https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-provision-users-and-groups#update-group-add-members

heres a request from azure aad

[de.captaingoldfish.scim.sdk.keycloak.scim.ScimEndpoint] (default task-2) scim requestURL:
https://realm.domain.com/auth/realms/realm/scim/v2/Groups/b03edd26-a054-4e46-abf3-98b8fc177faa

[de.captaingoldfish.scim.sdk.keycloak.scim.ScimEndpoint] (default task-2) scim body:
{"schemas":["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations":[{"op":"add","path":"members","value":[{"value":"132304dd-5616-4d48-845c-b0dec4c6658d"}]}]}

Keycloak legacy distribution

I tried to get the extension working with keycloak:18.0.0-legacy (the jboss distribution). I couldn't get it to work because of some problems with liquibase (first because of liquibase.secureParsing and second because of some error when trying to read the liquibase migration files from the jar).

Is this something that should still be supported or is Quarkus the only supported distribution? If the legacy jboss distribution should still be supported I can provide logfiles and stacktraces for those errors.

Configuration settings different in cluster environments

I recently noticed that a misconfiguration between two cluster nodes might occur in keycloak cluster environments. This occurs only under the following circumstances:

  1. You got at least two running keycloak nodes
  2. you change the configuration of node 1
  3. the configuration of node 2 will not be updated

this problem occurs because I missed to store the configuration settings within the infinispan cache and the updated configuration is not read from the database for each request. So a restart of node 2 would fix the problem.

It will take some time until this issue will be fixed.

Patching email of type work via Azure provisioning not working.

Hi, when i try to patch a users email, via Azure's provisioning I recived the following error message:

Web Response: {"detail":"No target found for path-filter 'emails[type eq \"work\"].value'","schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"status":400,"scimType":"noTarget"}

When trying to perform the same request using Postman with the following body:

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "replace",
            "path": "emails[type eq \"work\"].value",
            "value": "[email protected]"
        }
    ]
}

I reviced the same error message as i did from Azure as I mention earlier, however when using the following operation, the patch work as inteded and I reviced an the email address was updated.

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "replace",
            "path": "emails",
            "value": [{ "type": "work","value": "[email protected]", "primary": true }]
        }
    ]
}

I also found out that it was possible to patch a user's phoneNumber via an Operation similar to the email operation that failed.

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "replace",
            "path": "phoneNumbers[type eq \"work\"].value",
            "value": "+1 234 567 8915"
        }
    ]
}

How come that it's possible to patch and change the user's phoneNumber via Azure, but not the email field when performing similar operations? Is this behavior intended, or what could cause this error message.

Keycloak 19.0.1?

Just curious if there will be a release that works with 19.0.1 or if the existing 18.X will work with it.

Syncing group members from AAD

First thanks for this amazing job.
I am currently trying to sync users & groups from Azure AD but the group membership link is not captured. It seems that your code expects a member type to be set by the SCIM client to know if this is a group membership or a user membership. As far as I can see, this member type is not set by AAD.

As it seems that your extension supports syncing from AAD to keycloak, would you know if this is a limitation of the code or if this requires a specific configuration on AAD side ?

Thanks a lot

Azure AD not connecting to Keycloak SCIM endpoint

Hi there,

I could follow the guide on connecting Azure AD till the point where I had to test the connection between Azure AD and Keycloak.

The connection doesn't work for some reason.

I believe that there is an error in the following endpoint: https://<SERVER>/auth/realms/<REALM>/scim/v2
When I test the endpoint using Postman, I get this error
image

Azure error:

image

Background info:

Keycloak: Keycloak-X version 18.0.2
provider version: kc-18-b1

Two questions:

  • does the error have something to do with the provider?
  • what is the "Secret Token" in Azure Portal? Is it the access token that I get after authenticating against the client or is it the secret in clients -> -> credentials -> secret?
    image

Any support for pushing?

I'm trying to see if Keycloak plus your SCIM add-on can be used to provide user/group information to Atlassian Access.

Atlassian Access says that it works with SCIM providers but the documentation is only for a limited set of providers and, from what I can glean, it looks like all of those providers push to Atlassian Access, rather than AA syncing from Keycloak + SCIM.

https://confluence.atlassian.com/cloud/user-provisioning-959305316.html

Is that something I can achieve with the code you've written?

Thanks.

Split package warnings on Keycloak startup when extension is installed

Thanks for the plugin! When I install it, it appears to function as intended, but I get warnings logged (see end of ticket).

It looks like your release binary is including the classes for Jackson and SLF4J in addition to the classes for the extension itself. Is this intentional and needed?

I'm trying to set up an automated using an embedded Keycloak server, and in that context the bundled Jackson results in a version conflict, as the Jackson you're bundling is older than the one used by the main application, resulting in a NoSuchMethodError.

java.lang.NoSuchMethodError: 'com.fasterxml.jackson.databind.node.ObjectNode com.fasterxml.jackson.databind.node.ObjectNode.withObject(java.lang.String)'

If possible, I think it would be desirable to stop bundling these classes in the release JAR.

I'm currently working with scim-for-keycloak-kc-18-b2 and Keycloak 20.0.2

2023-01-18 16:12:38,622 WARN  [io.quarkus.arc.deployment.SplitPackageProcessor] (build-34) Detected a split package usage which is considered a bad practice and should be avoided. Following packages were detected in multiple archives:
- "com.fasterxml.jackson.core.json" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.exc" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.jsonschema" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.slf4j.event" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.ext" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.util" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.function" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.deser.impl" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.ser.impl" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.deser.std" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.builder" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.annotation" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.arch" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.event" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.cfg" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.slf4j.spi" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.json.async" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.filter" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.jsonFormatVisitors" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.exc" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.reflect" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.module" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.tuple" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.time" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.deser" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.slf4j" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.text" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.slf4j.helpers" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.annotation" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.util" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.compare" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.json" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.ser" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.async" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.jsontype.impl" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.exception" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.mutable" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.jsontype" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.format" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.type" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.concurrent" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.node" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.stream" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.math" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.io" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.base" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.core.sym" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.introspect" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.text.translate" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.ser.std" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.type" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "com.fasterxml.jackson.databind.jdk14" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]
- "org.apache.commons.lang3.concurrent.locks" found in [/Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/keycloak-system-identity-all.jar, /Users/dcarr/repos/ge-scim/keycloak-app/build/keycloak/lib/../providers/scim-for-keycloak-kc-18-b2.jar]

Docker image

Hi!

We are using Keycloak in Kubernetes and therefore use the Keycloak Docker image and Helm chart.
Are there any plans on creating a Dockerfile that bundles Keycloak and scim-for-keycloak?

Thanks

Performance Problem

Hi
we have scim-for-keycloak running with AZURE and we have currently ~9.000 Users in a realm. Wenn the AZURE SCIM sends a request

https://keycloak.../auth/realms/REALM/scim/v2/Users?filter=userName+eq+%22AzureAD_Test-bdd952ba-be0b-47d4-b4c9-be5afee16d2d%22
(the user doesn't exist. it is sent to test finctionality)
the request runs in a timeout.
I commented out the part in the userrequest, which adds the group-membership to the user object, and then I get a timely response.
In the realm there is no group.

feature request: custom attribute mapping

It would be nice with a way to customize the attribute mapping, so for example instead of

phoneNumbers: { "value" : "+4511279865", "type" : "mobile", "primary" : false }

it could be mapped to

mobile: "+4511279865"

Issue with Azure AD

Hi,
I am trying to add an enterprise application in azure AD, i have added scim url and secret token(access token) and clicked on test connection. it is showing error. Attached a screenshot.
using Keycloak version 13. Could you provide support on this.

azureAD

Support for RFC7642 (user provisioning with Atlassian)

I recently got several requests asking for support of RFC7642 to provide push support to Atlassian products.
I have created this ticket to show that this is currently not supported.
I will try to add support as soon as possible. But this will still take some time and the support will be limited based on client-side authentication protocols.

In order to provide this feature I would also need to add support for authentication protocols on client side. Currently I am not aware of what is supported by keycloak on server side to achieve this.

Scim add and remove member doesnt' work

Hi @Captain-P-Goldfish thanks for your great work!

I've started to use your Keycloak plugin but I have an issue.
I created by KC's admin panel a group and I tried to add a user (created before by user scim endpoint) to the group.

But the user doesn't appear in group membership.

The URL called with PATCH is:
http://localhost:8080/auth/realms/myrealm/scim/v2/Groups/28bc3597-2046-40cc-ad4a-517049e303e4

This is my request body:

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "Add",
            "path": "members",
            "value": [
                {
                    "$ref": "http://localhost:8080/auth/realms/myrealm/scim/v2/Users/e0d3bf3b-f669-4eaf-a139-4b4b9b4df64b",
                    "value": "e0d3bf3b-f669-4eaf-a139-4b4b9b4df64b"
                }
            ]
        }
    ]
}

I receive the response:

{
    "id": "28bc3597-2046-40cc-ad4a-517049e303e4",
    "displayName": "Italy+Communications Italy",
    "members": [
        {
            "value": "c77bf49f-a026-49d5-bdf1-76da2ecc0163",
            "$ref": "http://localhost:8080/auth/realms/enel/scim/v2/Users/c77bf49f-a026-49d5-bdf1-76da2ecc0163",
            "type": "User"
        }
    ],
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "meta": {
        "resourceType": "Group",
        "created": "2021-07-15T16:32:26.106Z",
        "lastModified": "2021-07-15T16:32:26.106Z",
        "location": "http://localhost:8080/auth/realms/enel/scim/v2/Groups/28bc3597-2046-40cc-ad4a-517049e303e4"
    }
}

Keycloak version is: 12.0.2

In the response you can notice that the user doesn't appear 😞

Can you post only final ear file

Hi
I wondering if there is a way to only download ear files instead of building the whole process. It would be awesome to provide binaries. Thanks

AAD Group Members not syncing

We have deleted the master release on 15-b-2 but found that the groups create and the group members do not come across from AAD (either creating or deleting the memberships) are you able to provide any guidance here or can you advise how we could diagnose?

update liquibase schema location to use https for services that cannot handle redirects when parsing schema

We encountering parse exception when trying to read scim-changelog.xml.
dbchangelog-3.9.xsd has been moved permanently but our config doesnt handle redirects

using the https:// URL instead of http:// would permanently solve the problem

below the stack trace:

Error during startup: java.lang.RuntimeException: Exception invoking method [listUnrunChangeSets] on object [liquibase.Liquibase@1b4ec4ef], using arguments [null,(),false]

Caused by: liquibase.exception.ChangeLogParseException: Error parsing line 2 column 35 of META-INF/scim-changelog.xml: s4s-elt-character: Non-whitespace characters are not allowed in schema elements other than 'xs:appinfo' and 'xs:documentation'. Saw '301 Moved Permanently'.

Caused by: org.xml.sax.SAXParseException; systemId: http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.9.xsd; lineNumber: 2; columnNumber: 35; s4s-elt-character: Non-whitespace characters are not allowed in schema elements other than 'xs:appinfo' and 'xs:documentation'. Saw '301 Moved Permanently'.

SCIM API security

First thanks for this great extension!
What I didn't gasp is what permissions are checked on the account that calls the SCIM endpoints. I created a client with a service account and that was immediately allowed to create, modify and delete all users/groups - I had no roles assigned to it.
Is that because it was a service account or could any user with basic login capabilities do that? That in combination with the default settings (SCIM On on every realm, no restriction on the client) would be pretty open door.

I then restricted the SCIM access to the specific client which was enforced, but I am a bit unsure about the general security esp. if someone creates a new realm. Can you enlighten me?

Support for Keycloak Quarkus, > 17.0.0

Hi,

Do you have any plans to support the new Keycloak Quarkus deployments, after version 17.0.0? From what I've been reading, there aren't that many changes other than the removal of Wildfly. And the deploy process is slightly different.

I'm playing around with Keycloak 18.0.0, and copied the scim-for-keycloak EAR file as a JAR file into the providers directory, but the scim theme wasn't loaded. I manually copied the scim theme into the themes directory, but the SCIM admin link is not present in the UI. If I try to manually hit /admin/master/console/#/realms/master/scim/service-provider/settings I get an HTTP 404 from /realms/master/scim/admin/serviceProviderConfig

I also tested with KC_HTTP_RELATIVE_PATH=/auth for backwards compatibility with the paths, but the same thing happened.

Any suggestions for me?

Thanks!

Import/Export configuration of the SCIM provider

For deploying the SCIM connector in a real "production" environment, we would ideally need to rely on the export/import feature of Keycloak to support configuration as code.
It seems that the SCIM provider configuration is not handled by the default import/export mechanisms. Have you already looked at how this could be done ?
My first thought is that it could be exposed as a "component" configuration which would save us from changing the export/import endpoints. Any idea?

Thanks,
Tristan

Theme files missing

Hi,

it seems that the latest tag misses the resource files for the scim admin theme. I have seen that you removed all these files in commit 731c0f6 and that the artifact you have pushed contains a "scim2" folder but I can't find anything like this in the repo. Did I miss something ?

Thanks

Case (in)sensitive PATCH operations

Hi @Captain-P-Goldfish,
we started using scim-for-keycloak version 1.8.2 on keycloak version 9.0.
Everything worked fine until we started provisioning users over Azure SCIM where we have issue with case sensitive PATCH operations defined in PatchOp.

When users are patched over Azure SCIM operations have a first letter upper case (Add, Replace, Remove),
and in the Azure documentation under "general guidelines" point six it's stated
"Don't require a case-sensitive match on structural elements in SCIM, in particular PATCH op operation values, as defined in section 3.5.2. AAD emits the values of op as Add, Replace, and Remove."

This case sensitive check where problem lies is in PatchHandler - handlePatchOp.

Is it possible to make it case insensitive in PatchOp in order to be compatible with Azure SCIM?

Auth test error

Hello, with my team, we have configured the SCIM plugin with the AAD.
But we got an error when we test the connection (wiki step 4).

Our error is : "You are not authorized to access the 'LIST' endpoint on resource type 'users'"

When we disable the "Require Authentication" option of the endpoint to get users, we have another error like this :
{"detail":"sorry but an internal error has occurred.","schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"status":500}

Could you help us, please ?

Thanks for your implication.

Unauthenticated error while deleting all users in ScimClient (scim-for-keycloak-server)

Hello @Captain-P-Goldfish, facing issues related to ScimClient

ScimClient.java

  1. Base URLs are not updated as per the latest release.
  2. While executing the code, lets say for deleting all users, although bearer token is provided, unauthenticated 401 is returned as response.

Following is the SCIM configuration for "test" realm:

image

Following is the response:

{
"detail": "not authenticated",
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": 401,
"scimType": "unauthenticated"
}

Tried from ScimClient as well as Postman. Same error persists.

image

Kindly let me know if I am missing anything!

Liquibase changelog fails to execute in kc-16-b3

�[0m�[31m20:32:02,350 FATAL [org.keycloak.services] (ServerService Thread Pool -- 61) Error during startup: java.lang.RuntimeException: Exception invoking method [listUnrunChangeSets] on object [liquibase.Liquibase@4cae178e], using arguments [null,(),false]
at [email protected]//org.keycloak.common.util.reflections.Reflections.invokeMethod(Reflections.java:386)
at [email protected]//org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider.getLiquibaseUnrunChangeSets(LiquibaseJpaUpdaterProvider.java:288)
at [email protected]//org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider.validateChangeSet(LiquibaseJpaUpdaterProvider.java:254)
at [email protected]//org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider.validate(LiquibaseJpaUpdaterProvider.java:240)
at [email protected]//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.migration(DefaultJpaConnectionProviderFactory.java:344)
at [email protected]//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.lambda$lazyInit$0(DefaultJpaConnectionProviderFactory.java:212)
at [email protected]//org.keycloak.models.utils.KeycloakModelUtils.suspendJtaTransaction(KeycloakModelUtils.java:753)
at [email protected]//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.lazyInit(DefaultJpaConnectionProviderFactory.java:163)
at [email protected]//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:88)
at [email protected]//org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.create(DefaultJpaConnectionProviderFactory.java:66)
at [email protected]//org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:316)
at [email protected]//org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:64)
at [email protected]//org.keycloak.models.jpa.JpaRealmProviderFactory.create(JpaRealmProviderFactory.java:40)
at [email protected]//org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:316)
at [email protected]//org.keycloak.services.DefaultKeycloakSession.realmLocalStorage(DefaultKeycloakSession.java:228)
at [email protected]//org.keycloak.models.cache.infinispan.RealmCacheSession.getRealmDelegate(RealmCacheSession.java:149)
at [email protected]//org.keycloak.models.cache.infinispan.RealmCacheSession.getRealm(RealmCacheSession.java:411)
at [email protected]//org.keycloak.services.managers.ApplianceBootstrap.isNewInstall(ApplianceBootstrap.java:46)
at [email protected]//org.keycloak.services.resources.KeycloakApplication$3.run(KeycloakApplication.java:195)
at [email protected]//org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:239)
at [email protected]//org.keycloak.services.resources.KeycloakApplication.bootstrap(KeycloakApplication.java:172)
at [email protected]//org.keycloak.services.resources.KeycloakApplication$1.run(KeycloakApplication.java:136)
at [email protected]//org.keycloak.models.utils.KeycloakModelUtils.runJobInTransaction(KeycloakModelUtils.java:239)
at [email protected]//org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:128)
at [email protected]//org.keycloak.provider.wildfly.WildflyPlatform.onStartup(WildflyPlatform.java:36)
at [email protected]//org.keycloak.services.resources.KeycloakApplication.(KeycloakApplication.java:114)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at [email protected]//org.jboss.resteasy.core.ConstructorInjectorImpl.constructOutsideRequest(ConstructorInjectorImpl.java:225)
at [email protected]//org.jboss.resteasy.core.ConstructorInjectorImpl.construct(ConstructorInjectorImpl.java:209)
at [email protected]//org.jboss.resteasy.core.providerfactory.Utils.createProviderInstance(Utils.java:102)
at [email protected]//org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl.createProviderInstance(ResteasyProviderFactoryImpl.java:1385)
at [email protected]//org.jboss.resteasy.core.ResteasyDeploymentImpl.createApplication(ResteasyDeploymentImpl.java:418)
at [email protected]//org.jboss.resteasy.core.ResteasyDeploymentImpl.initializeObjects(ResteasyDeploymentImpl.java:265)
at [email protected]//org.jboss.resteasy.core.ResteasyDeploymentImpl.startInternal(ResteasyDeploymentImpl.java:137)
at [email protected]//org.jboss.resteasy.core.ResteasyDeploymentImpl.start(ResteasyDeploymentImpl.java:121)
at [email protected]//org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:144)
at [email protected]//org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:42)
at [email protected]//io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
at org.wildfly.security.elytron-web.undertow-server-servlet@1.10.1.Final//org.wildfly.elytron.web.undertow.server.servlet.RunAsLifecycleInterceptor.doIt(RunAsLifecycleInterceptor.java:70)
at org.wildfly.security.elytron-web.undertow-server-servlet@1.10.1.Final//org.wildfly.elytron.web.undertow.server.servlet.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:76)
at [email protected]//io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
at [email protected]//io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:309)
at [email protected]//io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:145)
at [email protected]//io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:588)
at [email protected]//io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:559)
at [email protected]//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at [email protected]//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at [email protected]//io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:601)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:106)
at [email protected]//org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:87)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:829)
at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: liquibase.exception.ChangeLogParseException: Error parsing line 5 column 133 of META-INF/scim-changelog.xml: schema_reference.4: Failed to read schema document 'src/main/resources/META-INF/dbchangelog-3.9.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not xsd:schema.
at org.liquibase//liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:114)
at org.liquibase//liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17)
at org.liquibase//liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229)
at org.liquibase//liquibase.Liquibase.listUnrunChangeSets(Liquibase.java:1183)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at [email protected]//org.keycloak.common.util.reflections.Reflections.invokeMethod(Reflections.java:380)
... 64 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 133; schema_reference.4: Failed to read schema document 'src/main/resources/META-INF/dbchangelog-3.9.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not xsd:schema.
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:100)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:392)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:306)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:4257)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(XSDHandler.java:4248)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument1(XSDHandler.java:2542)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2238)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:588)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:617)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2710)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2069)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:829)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:613)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:836)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at org.liquibase//liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:106)
... 72 more
Caused by: java.io.FileNotFoundException: /src/main/resources/META-INF/dbchangelog-3.9.xsd (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
at java.base/java.io.FileInputStream.(FileInputStream.java:157)
at java.base/java.io.FileInputStream.(FileInputStream.java:112)
at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)
at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:652)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:593)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:696)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:530)
at java.xml/com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2226)
... 90 more

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.