<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Keycloak on Puppeteers Oy</title>
		<link>https://www.puppeteers.net/tags/keycloak/</link>
		<description>Recent content in Keycloak on Puppeteers Oy</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Wed, 19 Apr 2023 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.puppeteers.net/tags/keycloak/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Keycloak Javascript policy deployment</title>
				<link>https://www.puppeteers.net/blog/keycloak-javascript-policy-deployment/</link>
				<pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/keycloak-javascript-policy-deployment/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/pexels-serinus-5149241.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This article tries to include &lt;em&gt;everything&lt;/em&gt; you need to know about Keycloak Javascript policy deployment. By Javascript policies I mean authorization policies of Javascript type attached to Keycloak clients that have authorization enabled. If you don&amp;rsquo;t know what Keycloak &lt;a href=&#34;https://www.puppeteers.net/blog/keycloak-authorization-services-terminology/&#34;&gt;authorization services&lt;/a&gt; are, you are probably in the wrong place.&lt;/p&gt;&#xA;&lt;p&gt;While the process of creating and deploying the JAR files is pretty well documented, it is not altogether clear for the uninitiated how the policies are shown in Keycloak.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keycloak authorization services REST API: paths and payloads</title>
				<link>https://www.puppeteers.net/blog/keycloak-authorization-services-rest-api-paths-and-payload/</link>
				<pubDate>Fri, 24 Mar 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/keycloak-authorization-services-rest-api-paths-and-payload/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/pexels-alex-andrews-12038081.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://www.keycloak.org/docs/latest/authorization_services/index.html&#34;&gt;Keycloak Authorization Services&lt;/a&gt; allows you to offload your application&amp;rsquo;s authorization decisions to Keycloak instead of implementing them in your code. This way you can leverage Keycloak&amp;rsquo;s advanced features like 2FA without any additional development on your part. If you&amp;rsquo;re unfamiliar with the Authorization Services I suggest having a look at the &lt;a href=&#34;https://www.puppeteers.net/blog/keycloak-authorization-services-terminology/&#34;&gt;Keycloak authorization services terminology&lt;/a&gt; first. You may also be interested in &lt;a href=&#34;https://www.puppeteers.net/blog/adding-new-permission-to-shared-resources-with-keycloak-rest-api/&#34;&gt;our sample code&lt;/a&gt; for managing Keycloak authorization services programmatically. To be perfectly honest, there is no separate Keycloak authorization services REST API. While the authorization services do support the UMA &lt;a href=&#34;https://www.keycloak.org/docs/latest/authorization_services/#_service_protection_api&#34;&gt;Protection API&lt;/a&gt;, that API is only needed if you want your &lt;em&gt;resource servers&lt;/em&gt; (e.g. webapps) to be able manage their own authorization services configuration inside Keycloak. For example, you might want to provide your webapp users the capability to grant access (e.g. read, write) to their own resources to &lt;em&gt;other&lt;/em&gt; users. In this article we &lt;em&gt;will not&lt;/em&gt; cover the Protection API at all.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Debugging Keycloak OIDC token exchange</title>
				<link>https://www.puppeteers.net/blog/debugging-keycloak-oidc-token-exchange/</link>
				<pubDate>Wed, 22 Mar 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/debugging-keycloak-oidc-token-exchange/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/pexels-pixabay-532173.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;s no substitute for understanding what you&amp;rsquo;re doing, and that in turn is difficult without seeing what is happening. Debugging Keycloak OIDC problems without understanding what is happening under the hood is no exception to this rule. The purpose of this article is twofold:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Help you learn how Keycloak OIDC token exchange work&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Provide you with the tools to debug Keycloak OIDC token exchanges in production environments&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For the purposes of this blog post I&amp;rsquo;ve been using the &lt;a href=&#34;https://github.com/PacktPublishing/Keycloak-Identity-and-Access-Management-for-Modern-Applications&#34;&gt;OpenID Connect Playground&lt;/a&gt; application from the book &lt;a href=&#34;https://www.packtpub.com/product/-keycloak-identity-and-access-management-for-modern-applications/9781800562493&#34;&gt;Keycloak - Identity and Access Management for Modern Applications&lt;/a&gt; from Packt Publishing. I can recommend that book for anyone who needs to understand Keycloak and in particular the protocols it supports (OAuth2, OIDC and SAML 2.0).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keycloak authorization services: terminology</title>
				<link>https://www.puppeteers.net/blog/keycloak-authorization-services-terminology/</link>
				<pubDate>Fri, 17 Mar 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/keycloak-authorization-services-terminology/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.puppeteers.net/blog/adding-new-permission-to-shared-resources-with-keycloak-rest-api/&#34;&gt;Keycloak Authorization Services&lt;/a&gt; are built on top of well-known standards such as the &lt;a href=&#34;https://oauth.net/2/&#34;&gt;OAuth2&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/User-Managed_Access&#34;&gt;User-Managed Access&lt;/a&gt; specifications (UMA). You can manage Keycloak Authorization Services programmatically, if needed, as described in our other &lt;a href=&#34;https://www.puppeteers.net/blog/adding-new-permission-to-shared-resources-with-keycloak-rest-api/&#34;&gt;blog post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;OAuth2 clients (such as front end applications) can obtain &lt;em&gt;access tokens&lt;/em&gt; from the server using the &lt;em&gt;token endpoint&lt;/em&gt; and use these tokens to access &lt;em&gt;resources&lt;/em&gt; protected by a &lt;em&gt;resource server&lt;/em&gt; (such as back end services).&lt;/p&gt;&#xA;&lt;p&gt;In the same way, Keycloak Authorization Services provide extensions to OAuth2 to allow access tokens to be issued based on the processing of all &lt;em&gt;policies&lt;/em&gt; associated with the &lt;em&gt;resource(s)&lt;/em&gt; or &lt;em&gt;scope(s)&lt;/em&gt; being requested. This means that resource servers can enforce access to their protected resources based on the &lt;em&gt;permissions&lt;/em&gt; granted by the server and held by an access token. In Keycloak Authorization Services the access token with permissions is called a &lt;em&gt;Requesting Party Token&lt;/em&gt; or &lt;em&gt;RPT&lt;/em&gt; for short.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Keycloak realm SMTP settings with Ansible</title>
				<link>https://www.puppeteers.net/blog/keycloak-realm-smtp-settings-with-ansible/</link>
				<pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/keycloak-realm-smtp-settings-with-ansible/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/pexels-brett-jordan-5426403.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Ansible has reasonably good support for managing various aspects of Keycloak. You can use the &lt;a href=&#34;https://docs.ansible.com/ansible/latest/collections/community/general/keycloak_realm_module.html&#34;&gt;community.general.keycloak_realm&lt;/a&gt; module to handle realm management, including Keycloak realm SMTP server settings. However, in the true Ansible fashion the documentation looks good, but does not help you much. In fact, documentation only mentions that the &lt;em&gt;smtp_server&lt;/em&gt; parameter is a dictionary, but that&amp;rsquo;s it. To be honest, that&amp;rsquo;s about as helpful as the description of the &lt;a href=&#34;https://www.keycloak.org/docs-api/15.0/rest-api/index.html#_realmrepresentation&#34;&gt;RealmRepresentation&lt;/a&gt; for Keycloak. This article aims to fill this documentation void. I also want to share some general advise for similar cases that pop up when you &lt;a href=&#34;https://www.puppeteers.net/blog/managing-keycloak-configuration-programmatically/&#34;&gt;manage Keycloak programmatically&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Adding new permission with Keycloak authorization services REST API</title>
				<link>https://www.puppeteers.net/blog/adding-new-permission-to-shared-resources-with-keycloak-rest-api/</link>
				<pubDate>Sun, 15 Jan 2023 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/adding-new-permission-to-shared-resources-with-keycloak-rest-api/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://puppeteers-public.hel1.your-objectstorage.com/pexels-ryan-miguel-capili-3605822.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-does-it-do-this-keycloak-thing&#34;&gt;What does it do, this Keycloak thing?&lt;/h3&gt;&#xA;&lt;p&gt;Dear seasoned keycloaker, as you probably know, &lt;a href=&#34;https://www.keycloak.org/&#34;&gt;Keycloak&lt;/a&gt; is a stable, scalable, programmable and otherwise killer platform to centralize all your identity, authentication and authorization needs. Keycloak supports &lt;em&gt;fine-grained authorization policies&lt;/em&gt; using Keycloak &lt;a href=&#34;https://www.keycloak.org/docs/latest/authorization_services&#34;&gt;authorization services&lt;/a&gt;. We highly recommend reading our &lt;a href=&#34;https://www.puppeteers.net/blog/keycloak-authorization-services-terminology/&#34;&gt;Keycloak authorization services terminology&lt;/a&gt; article before this article. if you don&amp;rsquo;t understand terms, you will have some hard times ahead. The purpose of &lt;em&gt;this article&lt;/em&gt; is to give you an example of how to work with the Keycloak authorization services REST API.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Managing custom realm keys in Keycloak programmatically</title>
				<link>https://www.puppeteers.net/blog/managing-custom-realm-keys-in-keycloak-programmatically/</link>
				<pubDate>Fri, 19 Aug 2022 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/managing-custom-realm-keys-in-keycloak-programmatically/</guid>
				<description>&lt;h2 id=&#34;what-are-keycloak-realm-keys&#34;&gt;What are Keycloak realm keys?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.keycloak.org/&#34;&gt;Keycloak&lt;/a&gt;&amp;rsquo;s authentication protocols make use of private and public keys for signing and encrypting, as described in the &lt;a href=&#34;https://www.keycloak.org/docs/latest/server_admin/index.html#realm_keys&#34;&gt;official documentation&lt;/a&gt;. These keys are realm-specific, and by default managed internally in Keycloak. So, when you create a realm using the Keycloak Admin API, kcadm.sh or manually using the Web UI, new keypair(s) get generated automatically. These are called &amp;ldquo;Managed keys&amp;rdquo;. However, you can also use custom realm keys in Keycloak, which is what this article is about. Using custom realm keys allow you, for example, to use a single keypair in multiple realms. When you import a custom private key, Keycloak uses it to automatically create a certificate. If you want, you can pass both a private key and a certificate signed with that private key instead. That way you can bypass Keycloak&amp;rsquo;s automatic certificate generation, should you need to.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to add OpenID to WordPress with Keycloak</title>
				<link>https://www.puppeteers.net/blog/how-to-add-openid-to-wordpress-with-keycloak/</link>
				<pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/how-to-add-openid-to-wordpress-with-keycloak/</guid>
				<description>&lt;p&gt;Adding &lt;a href=&#34;https://openid.net/what-is-openid/&#34;&gt;OpenID&lt;/a&gt; to Wordpress allows for existing users on a domain to connect without having to manage another account. In this setup, we will be using Keycloak to provide the existing accounts which the OpenID plugin will use.&lt;/p&gt;&#xA;&lt;p&gt;There are a few plugins for Wordpress that allow this functionality, but we will be using &lt;a href=&#34;https://wordpress.org/plugins/daggerhart-openid-connect-generic/&#34;&gt;OpenID-Connect-Generic&lt;/a&gt; by &lt;a href=&#34;https://www.daggerhartlab.com/&#34;&gt;Daggerhart&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keycloak-client-setup&#34;&gt;Keycloak Client Setup&lt;/h2&gt;&#xA;&lt;p&gt;First step is to create a client in Keycloak. In the Keycloak web UI, create an &lt;strong&gt;openid-connect&lt;/strong&gt; client by going to &lt;strong&gt;Clients&lt;/strong&gt; and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>X11 Connection Rejected</title>
				<link>https://www.puppeteers.net/blog/x11-connection-rejected/</link>
				<pubDate>Thu, 28 Apr 2022 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/x11-connection-rejected/</guid>
				<description>&lt;p&gt;When switching to root after the typical SSH with X11 forwarding enabled this error can appear:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ X11 connection rejected because of wrong authentication.&#xA;$ Error: Can&amp;#39;t open display: localhost:10.0&lt;/code&gt;&lt;/pre&gt;&#xA;  &lt;/div&gt;&lt;p&gt;The workaround seems to include copying the &lt;strong&gt;MIT-MAGIC-COOKIE-1&lt;/strong&gt; from the user who ssh&amp;rsquo;d in to the root user using xauth. Here&amp;rsquo;s how:&lt;/p&gt;&#xA;&lt;p&gt;First verify the &lt;strong&gt;$DISPLAY&lt;/strong&gt; being used and list the &lt;strong&gt;MIT-MAGIC-COOKIE-1&lt;/strong&gt; used for it :&lt;/p&gt;</description>
			</item>
			<item>
				<title>Showing SQL statements with Keycloak</title>
				<link>https://www.puppeteers.net/blog/showing-sql-statements-with-keycloak/</link>
				<pubDate>Fri, 31 Dec 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/showing-sql-statements-with-keycloak/</guid>
				<description>&lt;p&gt;Sometimes you might find yourself wondering whether there is some paranormal activity going on with your keycloak and its database. To check if things are still in the realm of physical reality, and to restore your child&amp;rsquo;s faith in the programmer who never makes mistakes, it might be soothing to check what&amp;rsquo;s actually happening to the database. To do this, create a new property named &lt;strong&gt;showSql&lt;/strong&gt; and give it a value of &lt;strong&gt;true&lt;/strong&gt; in your connectionsJpa spi. This is located in standalone.xml, standalone-ha.xml, or in domain.xml (if you&amp;rsquo;ve already graduated from kindergarten).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dealing with multiple AWS accounts with one Keycloak client for Single-Sign On</title>
				<link>https://www.puppeteers.net/blog/dealing-with-multiple-aws-accounts-with-one-keycloak-client-for-single-sign-on/</link>
				<pubDate>Thu, 18 Nov 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/dealing-with-multiple-aws-accounts-with-one-keycloak-client-for-single-sign-on/</guid>
				<description>&lt;p&gt;This article assumes that the user backend for Keycloak is &lt;a href=&#34;https://www.freeipa.org/page/Main_Page&#34;&gt;FreeIPA&lt;/a&gt;. Regardless of that the instructions will apply to any other setup with minor modifications. Here we use two different AWS accounts renamed to 123412341234 and 567856785678 to protect the personal information of the innocent. The Keycloak staging cluster on which this integration was done is called &lt;em&gt;id-staging.example.org&lt;/em&gt; and the production cluster is called &lt;em&gt;id.example.org&lt;/em&gt;. The Keycloak realm is EXAMPLE.ORG. Replace those with the values correct for your environment.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gitlab SAML to Keycloak Setup</title>
				<link>https://www.puppeteers.net/blog/gitlab-saml-with-keycloak/</link>
				<pubDate>Wed, 12 May 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/gitlab-saml-with-keycloak/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Integrating Keycloak with Gitlab SAML makes it easier to manage users in an organization from a central point. You could manage separate accounts on Gitlab, but for us it makes sense to utilize Keycloak as we are already using it for other applications.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-keycloak&#34;&gt;Setting up Keycloak&lt;/h2&gt;&#xA;&lt;p&gt;The first step is to create a Gitlab SAML client in the Keycloak dashboard. With the correct realm selected, navigate to the Clients configuration page and click the create button to add a new client.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Solving an Apache Mellon redirect loop mystery</title>
				<link>https://www.puppeteers.net/blog/solving-an-apache-mellon-redirect-loop-mystery/</link>
				<pubDate>Sat, 27 Feb 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/solving-an-apache-mellon-redirect-loop-mystery/</guid>
				<description>&lt;p&gt;If you’re at all like me, you every now and then find yourself thrown out of your comfort zone, when you should actually be in it.&lt;/p&gt;&#xA;&lt;p&gt;The pattern usually goes something like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It’s something simple. I’ll fix it in a couple of minutes and document it for others. I know my stuff. &lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Hmm, this seems to be a bit stubborn. I need to take a closer look.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Still doesn’t work. I need to run this in a debugging set up and break it into pieces, to see where the problem is. &lt;/p&gt;</description>
			</item>
			<item>
				<title>Authenticate and authorize Grafana users from FreeIPA groups via Keycloak</title>
				<link>https://www.puppeteers.net/blog/authenticating-and-authorizing-users-from-freeipa-groups-via-keycloak/</link>
				<pubDate>Thu, 28 Jan 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/authenticating-and-authorizing-users-from-freeipa-groups-via-keycloak/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://grafana.com&#34;&gt;Grafana&lt;/a&gt; is a common tool to visualize data from multiple datasources. Perhaps the most common datasource is &lt;a href=&#34;https://prometheus.io/docs/introduction/overview/&#34;&gt;Prometheus&lt;/a&gt;. If an organization has a Single-Sign On solution, it makes sense to authenticate users centrally with that solution That will make authentication easier and friendlier for end users (authenticate once and then access multiple services), and also enable stronger authentication by adding &lt;a href=&#34;https://en.wikipedia.org/wiki/Multi-factor_authentication&#34;&gt;multifactor authentication&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In addition to authenticating user, it is also possible to authorize Grafana users based on their group membership. &lt;/p&gt;</description>
			</item>
			<item>
				<title>Making sense of JBOSS/Wildfly interfaces in domain mode</title>
				<link>https://www.puppeteers.net/blog/making-sense-of-jboss-wildfly-interfaces-in-domain-mode/</link>
				<pubDate>Thu, 28 Jan 2021 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/making-sense-of-jboss-wildfly-interfaces-in-domain-mode/</guid>
				<description>&lt;p&gt;In this blog we consider &lt;a href=&#34;https://www.jboss.org/&#34;&gt;JBoss/Wildfly&lt;/a&gt; domain mode in the context of the wonderful &lt;a href=&#34;https://www.keycloak.org/&#34;&gt;Keycloak&lt;/a&gt; software. It is not necessarily trivial to understand how the interfaces  should be configured, especially if you want to do something other than the defaults, for example to secure your Wildfly/JBOSS configuration, or if you are dealing with a more complex nodes with multiple network interfaces. &lt;/p&gt;&#xA;&lt;p&gt;Assumptions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We want to use Keycloak in domain mode. In this operating mode Keycloak application is clustered and also the caches, like user sessions are replicated in the cluster. &lt;/p&gt;</description>
			</item>
			<item>
				<title>Keycloak, Wildfly and Infinispan caches</title>
				<link>https://www.puppeteers.net/blog/keycloak-wildfly-and-infinispan-caches/</link>
				<pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/keycloak-wildfly-and-infinispan-caches/</guid>
				<description>&lt;p&gt;We recently hit an interesting issue with an &amp;ldquo;almost in production&amp;rdquo; Keycloak high-availability &lt;a href=&#34;https://www.keycloak.org/docs/latest/server_installation/index.html#_domain-mode&#34;&gt;clustered domain mode setup&lt;/a&gt; that was behind an Amazon EC2 load balancer with sticky sessions enabled. The symptom was that changes from the domain controller did not propagate to the slave. This included:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Changes made to realms and clients using the &lt;a href=&#34;https://www.keycloak.org/docs-api/11.0/rest-api/index.html&#34;&gt;Admin REST API&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;User sessions&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This lead us into a quest to truly understand how &lt;a href=&#34;https://infinispan.org/&#34;&gt;Infinispan&lt;/a&gt; caches in the &lt;a href=&#34;https://www.wildfly.org/&#34;&gt;Wildfly application server&lt;/a&gt; and consequently in &lt;a href=&#34;https://www.keycloak.org/&#34;&gt;Keycloak&lt;/a&gt; work. Before you read this article you should probably read all of these:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Managing Keycloak configuration programmatically</title>
				<link>https://www.puppeteers.net/blog/managing-keycloak-configuration-programmatically/</link>
				<pubDate>Fri, 11 Dec 2020 00:00:00 +0000</pubDate>
				<guid>https://www.puppeteers.net/blog/managing-keycloak-configuration-programmatically/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.keycloak.org/&#34;&gt;Keycloak&lt;/a&gt; is an excellent Open Source Identity and Access Management solution that builds on top of the &lt;a href=&#34;https://www.wildfly.org/&#34;&gt;Wildfly application server&lt;/a&gt;. We manage several Keycloak installations for providing SSO with FreeIPA credentials for self-hosted and SaaS services via SAML and OIDC.&lt;/p&gt;&#xA;&lt;p&gt;To keep our Keycloak configurations healthy and in a known-good state we manage their configurations programmatically. As we use Puppet for our configuration management needs we&amp;rsquo;ve contributed a lot to the &lt;a href=&#34;https://github.com/treydock/puppet-module-keycloak/&#34;&gt;treydock/puppet-module-keycloak&lt;/a&gt; project. There is also a &lt;a href=&#34;https://github.com/mrparkers/terraform-provider-keycloak&#34;&gt;Terraform Keycloak provider&lt;/a&gt; that covers the Keycloak API very well, but it won&amp;rsquo;t help you one bit with setting up Keycloak initially. This can be problematic if you&amp;rsquo;re setting up something more complex like clustered domain mode with TLS reverse proxies.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
