<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Jumpcloud SSO (idp) to Keycloak (sp)]]></title><description><![CDATA[<h2>Jumpcloud SAML SSO to Keycloak</h2>
<p dir="auto">So I recently had the challenge of setting up SAML authentication from <a href="https://jumpcloud.com" rel="nofollow ugc">Jumpcloud</a> to an existing application that uses <a href="https://www.keycloak.org/" rel="nofollow ugc">Keycloak</a> (v18.x) as its authentication provider.  As Keycloak can also be used as an identity provider the configuration can be a bit confusing.</p>
<p dir="auto">Keep in mind this quick tutorial assumes that you already have an existing Keycloak client which you are using to authenticate your service.  Details of building a client are outside the scope of these instructions.</p>
<p dir="auto">So lets get into it...</p>
<h3>Variables and Standards</h3>
<p dir="auto">The first thing we need to do is decide on some common variables and  standards for this tutorial.  Moving forward when referencing user defined variable we will wrap them in <a href="https://mustache.github.io/mustache.1.html" rel="nofollow ugc">moustaches</a> e.g. <code>{{var_here}}</code></p>
<ul>
<li>iDpID: <code>idp-jumpcloud-saml</code> (ID Provider ID)</li>
<li>BaseURL: <code>keycloak.example.com</code> (base url of your Keycloak instance)</li>
<li>RealmName: <code>myrealm</code> (Keycloak realm name)</li>
<li>RealmClient: <code>myclient</code></li>
<li>SPID: <code>sp-jumpcloud-saml</code> (Service Provider ID)</li>
<li>AppID: <code>mysaml</code> (Display label of your Jumpcloud App)</li>
<li>SPAppUrl: <code>https://unogs.com</code></li>
</ul>
<h3>Configure Jumpcloud</h3>
<ul>
<li>Login to the Jumpcloud admin interface</li>
<li>Click on <code>SSO</code></li>
<li>Click the large green <code>+</code> button</li>
<li>Click <code>Custom SAML App</code> (bottom of page)</li>
<li>Fill out your display label with <code>{{JDSID}}</code></li>
<li>Fill in a description if you want</li>
<li>Click on the <code>SSO</code> Tab</li>
<li>fill in <code>IdP Entity ID</code> with <code>{{iDpID}}</code></li>
<li>fill in <code>SP Entity ID</code> with <code>{{SPID}}</code></li>
<li>fill in <code>ACS URL</code>: <code>https://{{BaseURL}}/realms/{{RealmName}}/broker/{{iDpID}}/endpoint</code></li>
<li>select <code>SAMLSubjectNameID:</code> as <code>username</code></li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669390836320-screenshot-2022-11-25-at-15.39.51.png" alt="Screenshot 2022-11-25 at 15.39.51.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>select <code>Signature Algorithm</code> as <code>RSA-SHA256</code></li>
<li>fil in <code>Login URL</code> as <code>https://{{BaseURL}}/realms/{{RealmName}}/protocol/openid-connect/auth?response_type=code&amp;client_id={{RealmClient}}&amp;scope=openid&amp;redirect_uri={{SPAppURL}}&amp;kc_idp_hint={{SPID}}</code>
<ul>
<li>note: if you want to see your previous keycloak login screen remove: <code>kc_idp_hint</code></li>
</ul>
</li>
<li>tick <code>Sign Assertion</code></li>
<li>fill in <code>IDP URL</code> with <code>{{APPID}}</code></li>
<li>Add the following <code>User Attributes</code>:
<ul>
<li>value <code>email</code> select <code>email</code></li>
<li>value <code>firstname</code> select <code>firstname</code></li>
<li>value <code>lastname</code> select <code>lastname</code></li>
</ul>
</li>
<li>e.g.</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669391023070-screenshot-2022-11-25-at-15.43.22.png" alt="Screenshot 2022-11-25 at 15.43.22.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>click <code>activate</code></li>
<li>click on your newly created APP</li>
<li>click on the <code>User Groups</code> tab and select the group you want to give the above app access to.</li>
<li>click on the <code>SSO</code> tab</li>
<li>click <code>Export Metadata</code>, an xml called <code>JumpCloud-saml.xml</code> file will be saved locally</li>
</ul>
<h3>Configure Keycloak</h3>
<p dir="auto">Via the admin portal:</p>
<ul>
<li>click <code>Identity Providers</code></li>
<li>select <code>Add Provider</code> and select <code>SAML v2.0</code></li>
<li>change <code>Alias</code> to <code>{{iDpID}}</code></li>
<li>e.g.</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669390105436-screenshot-2022-11-25-at-14.39.35.png" alt="Screenshot 2022-11-25 at 14.39.35.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>change <code>Service Provider Entity ID</code> to <code>{{SPID}}</code></li>
<li>scroll to bottom of the page, select <code>Select File</code> and choose <code>JumpCloud-saml.xml</code></li>
<li>click <code>Import</code></li>
<li>click <code>Save</code></li>
<li>e.g.</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669390581437-screenshot-2022-11-25-at-15.33.46.png" alt="Screenshot 2022-11-25 at 15.33.46.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>go back into newly created provider and click the <code>Mappers</code> tab</li>
<li>do the following for email, firstname and lastname
<ul>
<li>click <code>create</code></li>
<li>give it a name</li>
<li>change Mapper type to attribute importer</li>
<li>fill in <code>Attribute Name</code> to type (email, firstname, lastname)</li>
<li>fill in <code>Friendly Name</code> to type (email, firstname, lastname)</li>
<li>select <code>ATTRIBUTE_FORMAT_UNSPECIFIED</code></li>
<li>fill in <code>User Attribute Name</code> kctype (email,firstName,lastName)</li>
</ul>
</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669389630971-screenshot-2022-11-25-at-14.41.00.png" alt="Screenshot 2022-11-25 at 14.41.00.png" class=" img-fluid img-markdown" /></p>
<hr />
<h3>Wrap UP</h3>
<p dir="auto">If everything went as planned, the above configuration should allow your users to click on a new app in their jumpcloud console and it will automatically login via your existing client.  For new users this configuration should also automatically populate user details in the JWT.</p>
<p dir="auto">If you have any questions or anything doesn't work as expected feel free to email me at <a href="mailto:admin@unogs.com" rel="nofollow ugc">admin@unogs.com</a></p>
]]></description><link>https://forum.uno.gs/topic/1041/jumpcloud-sso-idp-to-keycloak-sp</link><generator>RSS for Node</generator><lastBuildDate>Wed, 13 May 2026 22:16:45 GMT</lastBuildDate><atom:link href="https://forum.uno.gs/topic/1041.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Nov 2022 15:46:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Jumpcloud SSO (idp) to Keycloak (sp) on Mon, 28 Nov 2022 10:25:11 GMT]]></title><description><![CDATA[<h2>Mapping Groups from Jumpcloud</h2>
<p dir="auto">In the above post we set up Jumpcloud SAML SSO auth to use Keycloak as the SP.<br />
In addition, it is sometimes helpful to include your jumpcloud groups in the SAML token.  The following instructions should help enable this.</p>
<h3>Configure Jumpcloud</h3>
<ul>
<li>start by configuring your group to use the SSO App you created for SAML</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669463804076-screenshot-2022-11-26-at-11.51.30.png" alt="Screenshot 2022-11-26 at 11.51.30.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>Now update your SAML app to include group information:
<ul>
<li>Go to your SSO App</li>
<li>click on the SSO Tab and scroll to the bottom</li>
<li>tick the box for <code>Group Attributes</code></li>
<li>give it a name like <code>memberOf</code> (can be any name but you will need this for keycloak)</li>
<li>click <code>save</code></li>
</ul>
</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669464042519-screenshot-2022-11-26-at-12.00.33.png" alt="Screenshot 2022-11-26 at 12.00.33.png" class=" img-fluid img-markdown" /></p>
<hr />
<h3>Configure Keycloak</h3>
<ul>
<li>Open Keycloak admin portal for your realm</li>
<li>Click on <code>Roles</code> and create a new role e.g. <code>saml-group</code></li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669464337866-screenshot-2022-11-26-at-12.04.42.png" alt="Screenshot 2022-11-26 at 12.04.42.png" class=" img-fluid img-markdown" /></p>
<hr />
<ul>
<li>Click on <code>Identity Providers</code> and select the provider you created earlier (see above blog post)</li>
<li>Click on the <code>Mappers</code> tab</li>
<li>Click <code>Create</code></li>
<li>Give it a name e.g. <code>saml-group</code></li>
<li>select <code>Sync Mode Overrride</code> equal to <code>force</code> (this updates the groups associated with this account on every login)</li>
<li>Create a new <code>Attributes</code> using the Jumpcloud <code>Group Attributes</code> identifier, in this case <code>memberOf</code> as the key and your Jumpcloud group name as the key</li>
<li>Set Regex Attribute Values to <code>On</code></li>
<li>Under Role, choose the role you created</li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1669464721608-screenshot-2022-11-26-at-12.11.52.png" alt="Screenshot 2022-11-26 at 12.11.52.png" class=" img-fluid img-markdown" /></p>
<hr />
]]></description><link>https://forum.uno.gs/post/2069</link><guid isPermaLink="true">https://forum.uno.gs/post/2069</guid><dc:creator><![CDATA[admin]]></dc:creator><pubDate>Mon, 28 Nov 2022 10:25:11 GMT</pubDate></item></channel></rss>