<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 19 May 2016 at 14:48, Mitya <span dir="ltr">&lt;<a href="mailto:mitya@cargosoft.ru" target="_blank">mitya@cargosoft.ru</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi Stian, thanks for response!<br>
<span class=""><br>
&gt; You don&#39;t strictly need to use model interface, JPA adapter, etc..<br>
&gt; You can just make it a entity directly. We have those layers because<br>
&gt; we support JPA and Mongo.<br>
<br>
</span>thx, got it<br>
<br>
(interestingly, many IDM developers end up implementing a JDO-like<br>
engine; this has also happened to PicketLink, they supported both JPA<br>
and LDAP with a single API)<br>
<span class=""><br>
&gt; At the moment you can&#39;t add custom entities to the persistence.xml<br>
&gt; without modifying it within the JAR, but we plan to introduce an<br>
&gt; Entity SPI that allows adding custom entities (we have a PR for it,<br>
&gt; it needs some work, but should be included in 2.0.0.CR1 due some time<br>
&gt; in June).<br>
<br>
</span>Glad to hear about Entity SPI! I&#39;ll probably start with modified<br>
KeyCloak, and migrate to the SPI as soon as it&#39;s ready.<br></blockquote><div><br></div><div>You can give the PR a test if you&#39;d like. It&#39;s in the list of PRs waiting to be merged.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><br>
&gt; We have added support for custom REST resource, but not admin<br>
&gt; resources. Main difference is how it&#39;s secured and URLs.<br>
<br>
</span>Could you please elaborate on &quot;custom REST resources&quot;? I couldn&#39;t find<br>
anything in the docs, there is only &quot;21. Admin REST API&quot;. What are<br>
custom REST resources, how to implement them? Could they be helpful in<br>
my use case?<br></blockquote><div><br></div><div>It allows adding custom rest endpoints. No docs or examples yet, but you can take a look at <a href="https://github.com/keycloak/keycloak/blob/master/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestingResourceProvider.java">https://github.com/keycloak/keycloak/blob/master/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/src/main/java/org/keycloak/testsuite/rest/TestingResourceProvider.java</a>. We use it for our testsuite.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
Cheers,<br>
Mitya<br>
<div class=""><div class="h5"><br>
&gt; &gt; You&#39;d also need to modify the admin console, but that can be done<br>
&gt; with a custom theme.<br>
&gt; &gt; &gt; On 19 May 2016 at 12:36, Mitya &lt;<a href="mailto:mitya@cargosoft.ru">mitya@cargosoft.ru</a>&gt; wrote:<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; My goal is to implement a custom first-class KeyCloak entity (like<br>
&gt; &gt; User, Group, etc.) Entities should persist in KeyCloak database<br>
&gt; &gt; along<br>
&gt; &gt; with Users, Groups etc.; there should be a CRUD interface in the<br>
&gt; &gt; admin<br>
&gt; &gt; console to manage them; it will have an unidirectional N:1<br>
&gt; &gt; relationship<br>
&gt; &gt; to User and will participate in authentication process. In some<br>
&gt; &gt; future,<br>
&gt; &gt; most likely it will also participate in federation (to/from<br>
&gt; &gt; external<br>
&gt; &gt; LDAP server with custom schema).<br>
&gt; &gt;<br>
&gt; &gt; After briefly studying KeyCloak internals, I&#39;ve got an impression<br>
&gt; &gt; that<br>
&gt; &gt; Provider SPIs won&#39;t help me much. Seems like what I&#39;ll have to<br>
&gt; &gt; implement is at least:<br>
&gt; &gt;<br>
&gt; &gt; - model interface (org.keycloak.models)<br>
&gt; &gt; - entity class (org.keycloak.models.entities)<br>
&gt; &gt; - JPA adapter (org.keycloak.models.jpa)<br>
&gt; &gt; - JPA entity (org.keycloak.models.jpa.entities)<br>
&gt; &gt; - (the same for Mongo and Infinispan)<br>
&gt; &gt; - REST representation (org.keycloak.representations.idm)<br>
&gt; &gt; - REST resource (org.keycloak.services.resources.admin)<br>
&gt; &gt;  <br>
&gt; &gt; Next, there will be custom authenticator (to make use of the<br>
&gt; &gt; entity)<br>
&gt; &gt; and GUI modifications. I hope I didn&#39;t forget anything?<br>
&gt; &gt;<br>
&gt; &gt; Important question is - can I implement all of that without<br>
&gt; &gt; modifying<br>
&gt; &gt; KeyCloak code? Maintaining a fork and producing customized builds<br>
&gt; &gt; will<br>
&gt; &gt; complicate development process a lot. Ideally, classes should<br>
&gt; &gt; reside in<br>
&gt; &gt; my own packages (not org.keycloak.*), the code should be packaged<br>
&gt; &gt; as a<br>
&gt; &gt; module (JBoss module? OSGi bundle?) and simply be plugged into an<br>
&gt; &gt; official KeyCloak build. I see forking only as a last resort, it&#39;s<br>
&gt; &gt; something I&#39;d like to avoid absolutely.<br>
&gt; &gt;<br>
&gt; &gt; Thanks!<br>
&gt; &gt; Mitya<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; keycloak-dev mailing list<br>
&gt; &gt; <a href="mailto:keycloak-dev@lists.jboss.org">keycloak-dev@lists.jboss.org</a><br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
</div></div></blockquote></div><br></div></div>