single-sign-onmulti-tenantkeycloak

keycloak - realm resolution based on username (email address)


I'm working on a multi tenant project where usernames are actually their email addresses and the domain of the email serves as a tenant identifier.

Now in keycloak I'll have different realms per tenant, but I want to have a single login page for all tenants and the actual realm that will do the authentication to be somehow resolved by the username (email address).

How do I go about doing that?

I found a thread on the mailing list (that I cant find now...) that discussed the same problem. It was something along the lines of - create a main realm that will "proxy" to the others, but I'm not quite sure how to do that.


Solution

  • The idea from the mailing list is to write a service (let's say auth-redirector.example.com) that has a single input field for email, finds realm based on domain and redirects to that realm's keycloak endpoint (e.g. auth.example.com/auth/realms/realm-name/etc…) while keeping all GET params.

    You can find examples of direct login/registration URLs here: https://lists.jboss.org/pipermail/keycloak-user/2016-July/007045.html

    One usability problem is that users would have to provide their email twice, I have not yet found a way to pass the username via the login URL.