<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 19 November 2015 at 15:43, Bill Burke <span dir="ltr">&lt;<a href="mailto:bburke@redhat.com" target="_blank">bburke@redhat.com</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">FYI, there&#39;s other problems too.  Built in clients are looked up via their hardcoded ClientIds &quot;admin-console&quot; &quot;broker&quot; etc, again because DB ids are generated.<br>
<br>
I just don&#39;t see how you can remove ID or ClientID. ID is URL friendly, ClientID isn&#39;t and needs to be encoded.  ID is pretty much hidden from the user until they want to use the REST interface.  If you remove ID from the REST interface then ClientID @PathParams are gonna have to be encoded which could be a real pain for users, especially ones using simple HTTP.  While most libraries will encode query and form params, users will have to encode by hand other mechanisms.<br></blockquote><div><br></div><div>For clients I was thinking we should remove ClientID, not ID. We&#39;d allow specifying the ID when creating a new client, but not changing it. The ID would also have to be URL friendly.</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>
There&#39;s a similar problem with Groups.  Groups are looked up via a &quot;path&quot; name &quot;/parent/child&quot;  in the REST interface, then you have use the ID to reference the rest of the GROUP rest interface i.e. groups/{ID}/children.<br></blockquote><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>
We&#39;ll have similar problems with role namespaces if you want to incorporate them into the REST interface.<br>
<br>
ClientId should be forced to become a URL friendly string (no special characters or &#39;/&#39; or &quot;?&quot;, etc.).  SAML can introduce an Issuer URL or something.  After that, you can remove ID.  That&#39;s the only solution I can see that will work well.</blockquote><div><br></div><div>For groups and roles couldn&#39;t the ID be the full path? Then the REST endpoints would be aware of &quot;hierarchies&quot; so you could just do:</div><div><br></div><div>get /auth/realms/groups/group-parent/group-child</div><div><br></div><div>And:</div><div><br></div><div>get /auth/realms/roles/role/path/to/role/myrole<br></div><div><br></div><div>??</div><div><br></div><div>I think the current approach of having REST endpoints that retrieve based on ID is a pain point for a lot of users. They create a client with a named client-id or role with a name, then have to use a different ID to retrieve from the rest endpoints</div><div><br></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>
<br>
<br>
On 11/19/2015 8:59 AM, Stian Thorgersen wrote:<br>
</span><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="">
How about:<br>
<br>
* IDs are usually generated, but can be specified. It should not be<br>
possible to change them though<br>
<br>
* Instead of alias, name and all other ways of setting a human readable<br>
name we add Display Name and Display Class<br>
<br>
Not sure how to deal with migration, but if we agree on those points,<br>
then we can figure that out<br>
<br>
On 19 November 2015 at 14:49, Bill Burke &lt;<a href="mailto:bburke@redhat.com" target="_blank">bburke@redhat.com</a><br></span><div><div class="h5">
&lt;mailto:<a href="mailto:bburke@redhat.com" target="_blank">bburke@redhat.com</a>&gt;&gt; wrote:<br>
<br>
    One more thing.  Another problem is that if you switch to ID for<br>
    everything, then demos etc. will no longer run out of the box and you&#39;ll<br>
    have to modify adapter configuration to set the newly generated DB id.<br>
    Really, any piece of configuration that references things by client ID<br>
    will no longer work.<br>
<br>
    So, there&#39;s really 2 issues:<br>
<br>
    * Using ClientID in admin-console URLs doesn&#39;t work well as the client<br>
    IDs could have &#39;/&#39; characters in them<br>
    * Using ID only messes up pre-defined, pre-packaged adapter config and<br>
    you have to edit these files after the keycloak DB is set up.<br>
<br>
    On 11/19/2015 8:40 AM, Bill Burke wrote:<br>
     &gt; We currently actually have 3 client identifers:  ID, ClientID,<br>
    and Name.<br>
     &gt;<br>
     &gt; Also, I think there are a lot of duplicate clientID names between<br>
     &gt; realms.  i.e. &quot;admin-console&quot; &quot;broker&quot;, etc...<br>
     &gt;<br>
     &gt; A search by clientID is (realm + clientID).<br>
     &gt;<br>
     &gt; Marek is right about why I switched everything to ID in the admin<br>
     &gt; console.  For SAML I just didn&#39;t want to add yet another client<br>
     &gt; identifier since we already had 3.<br>
     &gt;<br>
     &gt; On 11/19/2015 7:52 AM, Marek Posolda wrote:<br>
     &gt;&gt; +1 for this change.<br>
     &gt;&gt;<br>
     &gt;&gt; I am just not sure if we should set the &quot;id&quot; to the current value of<br>
     &gt;&gt; &quot;client-id&quot; ? Few things to note:<br>
     &gt;&gt;<br>
     &gt;&gt; - SAML clients currently use clientId in form of URL. For example in<br>
     &gt;&gt; SAML demo there are clientIds like<br>
    &quot;<a href="http://localhosT:8080/employee-sig" rel="noreferrer" target="_blank">http://localhosT:8080/employee-sig</a>&quot;<br>
     &gt;&gt; . I don&#39;t know if it&#39;s requirement, maybe it&#39;s possible to solve it<br>
     &gt;&gt; somehow (ie. introduce different attribute for SAML client to store<br>
     &gt;&gt; these URLs). But from what I remember, Bill changed admin<br>
    console to use<br>
     &gt;&gt; &quot;id&quot; instead of &quot;clientId&quot; because there were issues with URL-like<br>
     &gt;&gt; clientId in admin console . So if we overwrite the &quot;id&quot; with current<br>
     &gt;&gt; &quot;client-id&quot; the issue will be back.<br>
     &gt;&gt;<br>
     &gt;&gt; - Migration might be a pain. Many tables (roles,<br>
    protocolMappers, user<br>
     &gt;&gt; consents, offline clientSessions ...) references client by &quot;id&quot; .<br>
     &gt;&gt; Overwriting &quot;id&quot; with &quot;client-id&quot; means that we will need to<br>
    change all<br>
     &gt;&gt; those DB records. And there are things like foreign keys etc...<br>
     &gt;&gt;<br>
     &gt;&gt; Shouldn&#39;t do vice-versa and just remove current &quot;client-id&quot; and ask<br>
     &gt;&gt; people to update their keycloak.json adapter configurations? On the<br>
     &gt;&gt; other hand, removing &quot;client-id&quot; might break migration of JSON<br>
    exported<br>
     &gt;&gt; realms as the JSON entities are using &quot;client-id&quot; for<br>
    referencing client.<br>
     &gt;&gt;<br>
     &gt;&gt; It seems the migration will be a pain regardless of whatever<br>
    direction<br>
     &gt;&gt; we choose :-(<br>
     &gt;&gt;<br>
     &gt;&gt; Marek<br>
     &gt;&gt;<br>
     &gt;&gt; On 16/11/15 14:54, Stian Thorgersen wrote:<br>
     &gt;&gt;&gt; We have both &quot;id&quot; and &quot;client-id&quot; for clients in Keycloak at the<br>
     &gt;&gt;&gt; moment. This seems unnecessary and complex.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; The model can retrieve clients on either value. In token<br>
    endpoints the<br>
     &gt;&gt;&gt; &quot;client-id&quot; is used. In admin endpoints the &quot;id&quot; is used.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; Also, in most cases it would be simpler for users to just have a<br>
     &gt;&gt;&gt; generated id than having to come up with one themselves. The id<br>
     &gt;&gt;&gt; doesn&#39;t have to be human readable either as we have name for that.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; OpenID Connect expects &quot;client-id&quot; to be generated by the IdP and<br>
     &gt;&gt;&gt; can&#39;t be changed once created.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; I propose we remove &quot;client-id&quot; and only keep id.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; For migration of existing clients we would set the &quot;id&quot; value<br>
    to the<br>
     &gt;&gt;&gt; current value of &quot;client-id&quot;. This would require no changes to<br>
    adapter<br>
     &gt;&gt;&gt; configs. When creating new clients from the admin console we<br>
    would not<br>
     &gt;&gt;&gt; allow setting the &quot;client-id&quot;, instead just display it after the<br>
     &gt;&gt;&gt; client was created. When importing clients it would be possible<br>
    to set<br>
     &gt;&gt;&gt; the id (and for backwards compatibility we would set &quot;id&quot; equal<br>
    to the<br>
     &gt;&gt;&gt; &quot;client-id&quot; field.<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt;<br>
     &gt;&gt;&gt; _______________________________________________<br>
     &gt;&gt;&gt; keycloak-dev mailing list<br></div></div>
     &gt;&gt;&gt; <a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a>&gt;<span class=""><br>
     &gt;&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>
     &gt;&gt;<br>
     &gt;&gt;<br>
     &gt;&gt;<br>
     &gt;&gt; _______________________________________________<br>
     &gt;&gt; keycloak-dev mailing list<br></span>
     &gt;&gt; <a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a>&gt;<span class=""><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>
     &gt;&gt;<br>
     &gt;<br>
<br>
    --<br>
    Bill Burke<br>
    JBoss, a division of Red Hat<br>
    <a href="http://bill.burkecentral.com" rel="noreferrer" target="_blank">http://bill.burkecentral.com</a><br>
    _______________________________________________<br>
    keycloak-dev mailing list<br></span>
    <a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a> &lt;mailto:<a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a>&gt;<br>
    <a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
<br>
<br>
</blockquote><div class=""><div class="h5">
<br>
-- <br>
Bill Burke<br>
JBoss, a division of Red Hat<br>
<a href="http://bill.burkecentral.com" rel="noreferrer" target="_blank">http://bill.burkecentral.com</a><br>
</div></div></blockquote></div><br></div></div>