[keycloak-user] Cannot invoke custom endpoint added to keycloak

Sebastien Blanc sblanc at redhat.com
Thu Mar 21 12:49:21 EDT 2019


Have you tried http://localhost:8080/auth/realm/master/custommessage1 ?

On Thu, Mar 21, 2019 at 7:55 AM Sachindra Dilhara <sachindragh at gmail.com>
wrote:

> Hi all,
>
> I want to add a custom endpoint to keycloak and I tried a sample given.
> Following are the steps I took.
>
> 1. *pom.xml*
> *<project xmlns="http://maven.apache.org/POM/4.0.0
> <http://maven.apache.org/POM/4.0.0>"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
> <http://www.w3.org/2001/XMLSchema-instance>"*
> *         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> <http://maven.apache.org/POM/4.0.0>
> http://maven.apache.org/maven-v4_0_0.xsd
> <http://maven.apache.org/maven-v4_0_0.xsd>">*
> *    <name>Keycloak Custom REST Endpoint Example</name>*
> *    <description/>*
> *    <modelVersion>4.0.0</modelVersion>*
>
> *    <artifactId>keycloak-custom-rest-endpoint</artifactId>*
> *    <packaging>jar</packaging>*
> *    <groupId>keycloak.example</groupId>*
> *    <version>1.0.0</version>*
>
> *    <properties>*
> *        <maven.compiler.source>11</maven.compiler.source>*
> *        <maven.compiler.target>11</maven.compiler.target>*
> *    </properties>*
>
> *    <dependencies>*
> *        <dependency>*
> *            <groupId>org.keycloak</groupId>*
> *            <artifactId>keycloak-core</artifactId>*
> *            <version>4.8.1.Final</version>*
> *            <scope>provided</scope>*
> *        </dependency>*
> *        <dependency>*
> *            <groupId>org.keycloak</groupId>*
> *            <artifactId>keycloak-server-spi</artifactId>*
> *            <version>4.8.1.Final</version>*
> *            <scope>provided</scope>*
> *        </dependency>*
> *        <dependency>*
> *            <groupId>org.keycloak</groupId>*
> *            <artifactId>keycloak-server-spi-private</artifactId>*
> *            <version>4.8.1.Final</version>*
> *            <scope>provided</scope>*
> *        </dependency>*
> *        <dependency>*
> *            <groupId>org.jboss.spec.javax.ws.rs
> <http://org.jboss.spec.javax.ws.rs></groupId>*
> *            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>*
> *            <version>1.0.2.Final</version>*
> *        </dependency>*
> *    </dependencies>*
>
> *    <build>*
> *        <finalName>hello-rest-example</finalName>*
> *        <plugins>*
> *            <plugin>*
> *                <groupId>org.apache.maven.plugins</groupId>*
> *                <artifactId>maven-compiler-plugin</artifactId>*
> *                <configuration>*
> *                    <source>6</source>*
> *                    <target>6</target>*
> *                </configuration>*
> *            </plugin>*
> *        </plugins>*
> *    </build>*
> *</project>*
>
> 2. *Provider class*
>
> *package org.keycloak.examples.rest;*
>
> *import org.keycloak.models.KeycloakSession;*
> *import org.keycloak.services.resource.RealmResourceProvider;*
>
> *import javax.ws.rs.GET;*
> *import javax.ws.rs.Path;*
> *import javax.ws.rs.Produces;*
>
> */***
> * * @author <a href="mailto:sthorger at redhat.com
> <sthorger at redhat.com>">Stian Thorgersen</a>*
> * */*
> *public class HelloResourceProvider implements RealmResourceProvider {*
>
> *    private KeycloakSession session;*
>
> *    public HelloResourceProvider(KeycloakSession session) {*
> *        this.session = session;*
> *    }*
>
> *    @Override*
> *    public Object getResource() {*
> *        return this;*
> *    }*
>
> *    @GET*
> *    @Path("/customMessage1")*
> *    @Produces("text/plain; charset=utf-8")*
> *    public String get1() {*
> *        String name = session.getContext().getRealm().getDisplayName();*
> *        if (name == null) {*
> *            name = session.getContext().getRealm().getName();*
> *        }*
> *        return "Hello " + name;*
> *    }*
>
> *    @GET*
> *    @Path("/customMessage2")*
> *    @Produces("text/plain; charset=utf-8")*
> *    public String get2() {*
> *        return "Hello custom message 2";*
> *    }*
>
> *    @Override*
> *    public void close() {*
> *    }*
>
> *}*
>
> 3. *Provider factory class*
>
> *package org.keycloak.examples.rest;*
>
> *import org.keycloak.Config.Scope;*
> *import org.keycloak.models.KeycloakSession;*
> *import org.keycloak.models.KeycloakSessionFactory;*
> *import org.keycloak.services.resource.RealmResourceProvider;*
> *import org.keycloak.services.resource.RealmResourceProviderFactory;*
>
> */***
> * * @author <a href="mailto:sthorger at redhat.com
> <sthorger at redhat.com>">Stian Thorgersen</a>*
> * */*
> *public class HelloResourceProviderFactory implements
> RealmResourceProviderFactory {*
>
> *    public static final String ID = "hello";*
>
> *    @Override*
> *    public String getId() {*
> *        return ID;*
> *    }*
>
> *    @Override*
> *    public RealmResourceProvider create(KeycloakSession session) {*
> *        return new HelloResourceProvider(session);*
> *    }*
>
> *    @Override*
> *    public void init(Scope config) {*
> *    }*
>
> *    @Override*
> *    public void postInit(KeycloakSessionFactory factory) {*
> *    }*
>
> *    @Override*
> *    public void close() {*
> *    }*
>
> *}*
>
> 4. Added
>
> *META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory*
> file with below content.
>
> *org.keycloak.examples.rest.HelloResourceProviderFactory*
>
> 5. Build a jar and dropped it in the
> *{$Keycloak_home}/standalone/deployments* folder and started the server.
>
> 6. Using the management console I could see that the jar is deployed. (
> http://localhost:9990/console/index.html#deployments)
>
> 7. Generated a token using *admin-cli* in *master* realm with *admin user*
> credentials.
>
> 8. Used that token to invoke the get endpoints "
> http://localhost:8080/auth/custommessage1" and "
> http://localhost:8080/auth/custommessage2". But both the nedpoints
> returned
> HTTP 404 Not Found.
>
> I want to know the following.
>
> 1. Have I created and deployed the custom endpoint correctly?
> 2. Is the URLs used to invoke endpoints are correct or not?
> 3. Have I used the correct way to invoke the custom endpoint. (I mean using
> the token generated from admin user in master) ?
>
> --
> Sachindra Dilhara
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>


More information about the keycloak-user mailing list