Skip to content

Add OrganizationMemberResource.updateMembershipType (membership-type endpoint from Keycloak 26.8) #252

Open

Description

@sdaute

Description

Description

Keycloak server 26.8 added an admin endpoint to change the membership type of an existing organization member (keycloak/keycloak#48913, implemented in
keycloak/keycloak#52370):

PUT /admin/realms/{realm}/organizations/{organizationId}/members/{memberId}/membership-type
Content-Type: application/json

"MANAGED"

keycloak/keycloak#52370 also added the matching method to OrganizationMemberResource in integration/admin-client-core of the main repository:

/**
 * @since Keycloak server 26.8.0
 */
@Path("membership-type")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
Response updateMembershipType(MembershipType membershipType);

This method has not been synced to keycloak-client yet. It is neither on main nor in the latest release 26.0.12, probably because the nightly upstream sync is currently failing (#250, #251).

Expected behavior

A keycloak-admin-client release that contains OrganizationMemberResource.updateMembershipType(MembershipType), so it can be used like this:

realm.organizations()
     .get(orgId)
     .members()
     .member(userId)
     .updateMembershipType(MembershipType.MANAGED);

Versions

Component Version
keycloak-admin-client 26.0.12
Keycloak server 26.8

Discussion

No response

Motivation

Use case

We provision users via SCIM into an organization, and they have to be managed members. OrganizationMembersResource.addMember(userId) always creates an unmanaged member, so the membership type has to be
changed afterwards.

Without the client method, we have to work around it with a custom JAX-RS interface and Keycloak.proxy(...):

@Path("/admin/realms/{realm}/organizations/{organizationId}/members/{memberId}/membership-type")
interface OrganizationMembershipTypeResource {
    @PUT
    @Consumes(MediaType.APPLICATION_JSON)
    fun update(
        @PathParam("realm") realm: String,
        @PathParam("organizationId") organizationId: String,
        @PathParam("memberId") memberId: String,
        membershipType: MembershipType,
    ): Response
}

keycloak.proxy(OrganizationMembershipTypeResource::class.java)
    .update(realm, organizationId, userId, MembershipType.MANAGED)

Details

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions