keycloak / keycloak-extension-poc

Apache License 2.0
3 stars 3 forks source link

Improving developer and extension story in Keycloak #13

Open stianst opened 5 months ago

stianst commented 5 months ago

Description

Improving our developer and extension story

What is an extension?

What can be improved

What could a marketplace do?

Discussion

None

Issues

No response

Motivation

No response

thomasdarimont commented 4 days ago

Adding to "What is an extension?":

thomasdarimont commented 4 days ago

We should also provide something like a keycloak-platform-bom or an keycloak-extension-bom that references all libraries available within the Keycloak distribution for a particular version.

Developers who want to write an extension should only need two (currently fictional dependencies):

<dependencyManagement>
    <dependencies>
        <dependency>
<!-- provides the keycloak libraries for the given keycloak base -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform-bom</artifactId>
            <version>${keycloak.version}</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
        <dependency>
<!-- all APIs available for extension development -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform</artifactId>
            <version>${keycloak.version}</version>
            <scope>provided</scope>
        </dependency>

<!-- if we had dedicated modules, users could declare a dependency to a specific module instead of refering to the keycloak-platform, e.g. oidc extensions -->
        <dependency>
<!-- all APIs within the oidc protocol context -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-oidc</artifactId>
            <version>${keycloak.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
<!-- testing integration -> new test framework? -->
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-platform-test</artifactId>
            <version>${keycloak.version}</version>
            <scope>test</scope>
        </dependency>
</dependencies>