Contact
Translation from Polish

One account for three applications: choosing shared sign-in

The goal was simple: one account for three applications. I had two options on the table — an ideal long-term design and a realistic one for the available time. I chose the second, keeping the first as a possible direction for future development.

Goal
Decide how to achieve one account and shared sign-in across three applications within the available time.
Tools

Review of existing code and processes · Keycloak as the shared identity system · comparison of two architecture options

Process
User need → existing-process analysis → ideal and realistic options → comparison of scope, migration and dependencies → first-stage decision.
Result
The realistic option was chosen and the first-stage scope agreed for a developer. A separate account service remained a possible direction for future development.
Two shared-account options: an ideal design with a new service and the selected realistic design using an existing application
Comparison of the options based on the analysis. The realistic option was selected for the first stage.

One key, separate access rules

One account for several applications is like one key for different buildings. It should be convenient to use, while each building keeps its own rooms and access rules. In applications, shared identity verification also needs to coexist with local permissions and data.

From the user’s perspective, the need was specific: sign in once and move to another application without entering a password again while the shared session remains active. This is single sign-on, or SSO. Both options were to use Keycloak, a system that verifies user identity and manages the sign-in session. Shared sign-in does not replace rules for granting and removing access, which I also cover in the onboarding and offboarding article.

Before choosing a solution, I checked the starting point

The applications already existed. They had registration, account activation, first-password setup, password reset, profiles and an administration panel. One handled shared business data, while the learning application had its own sign-in and product data.

The analysis therefore covered the entire account lifecycle. We needed to decide which processes to keep, which to move and how to link a user across applications. With that picture on the table, I could make a meaningful comparison between the two options.

The ideal option: a separate account service

The target design would introduce a separate shared-account service. It would manage profiles, contact details, consent and account processes for all products. Keycloak would still own identity, passwords and the shared session. Each application would retain its own data and permissions.

This gave a clear division of responsibilities: the shared profile would belong to none of the individual products. Another application could join the neutral account service. The shared profile panel would also have a place of its own.

But it meant building and then maintaining a new service, moving data and reworking registration, activation, password processes and the administration panel. It also meant a broader migration, more tests and a rollback plan in case deployment went wrong. All of that would need to be included in the time required to deliver the first benefit to a user.

The realistic option: use the existing processes

In the second option, the shared profile would remain in the application that already managed it. We would retain its registration, activation, account panel and existing way of initiating password resets. Keycloak would provide the shared identity and sign-in session.

The learning application would use the same sign-in without keeping a separate password for these users. Its local profile would be created or linked on the first successful entry. Its organisations, materials, progress and permissions would stay in place.

The migration and rework scope was smaller. There was also a specific compromise: an application historically responsible for one product would continue to handle the shared profile. Further products would depend on the data and integration rules it exposed.

What I actually compared

AreaIdeal optionRealistic option
Shared profileSeparate account serviceExisting application
Registration and activationMoved to a central processExisting processes retained
Account panelNew, neutral panelExisting panel
Migration and testingBroader scope of changesLimited scope of changes
Work before the first benefitMore building and migrationMore use of what already works
Cost of the choiceA new service to maintainContinued dependence on an existing application

I chose a scope for the available time

I chose the realistic option for the first stage. The priority was one account and moving between three applications without another password prompt. Limiting the changes let us focus the planned work on that goal.

The ideal option remained a reference point for future development. A separate account service could be reconsidered as products and shared processes grew, or as dependence on one application began to hinder further changes. That step would require reassessing ownership boundaries and migration.

What went into the first stage

The scope included shared sign-in, persistent links between user records and mapping existing roles. The learning application’s local profile would be created on the first successful sign-in. A new account service, another product integration and paid subscriptions stayed outside this stage.

The acceptance criteria described user behaviour: moving from one application to another, entering from a new tab, handling the absence of an active session and returning to the right page after sign-in. Production configuration details still needed confirmation before implementation.

The outcome of this analysis was an agreed scope for a developer. Alongside the target design, I had an option selected for the available time — with its compromise clearly stated. For a similar task, it is worth recording those three things: what we do now, what we leave for later and which dependency we consciously retain.

Open the original imageBack to entries