SSO and ERP Integration: How Customer Portals Connect to Legacy Systems

"Our ERP can't do that" is the most common objection to a customer portal — and it's almost always wrong. How SSO with Keycloak and four integration patterns connect portals to legacy systems without touching the old system at all.
8 min readMatthias RadscheitMatthias Radscheit
Happycodingen-US

TL;DR

A customer portal without ERP integration just postpones the phone calls. This guide answers the two core questions of every portal project: identity (SSO, roles, tenant isolation with Keycloak) and data integration (four patterns, from live API to synchronization). The key insight: your legacy system barely needs to do anything — the integration layer does the work, and the read-first principle keeps project risk low.

  • Only 9% of customers resolve their issue entirely through self-service (Gartner 2019) — usually because the ERP data is missing from the portal, not the frontend.
  • Companies run an average of 897 applications, and only 29% of them are integrated (MuleSoft 2025): point-to-point connections make the problem worse, an integration layer solves it.
  • Identity first: company accounts, roles per customer organization, and SSO with Keycloak — a CNCF project with references up to two million portal users.
  • Four integration patterns (live API, synchronization, events, integration layer) — in practice they're combined, always behind a dedicated, stable portal API.
  • Read-first lowers project risk: the first release displays existing data; write operations follow as a second stage through defined jobs.
  • Your legacy system needs very little: a data export is enough to start — an ERP upgrade or even an ERP replacement is not a prerequisite.

"Our ERP can't do that." More customer portal projects die on this sentence from the IT department than on any budget veto. But it rests on a false assumption: that the legacy system has to do the integration work. It doesn't. Connecting the systems is the portal's job — more precisely, the job of an integration layer that sits between the portal and your existing systems. What your ERP actually needs to bring to the table is surprisingly little.

This article answers the two technical questions every customer portal project should settle before the first line of code: How do users get in securely — meaning identity, SSO, and roles for customer organizations? And how does data get out securely — meaning the connection to ERP and CRM? Both are solved problems if you pick the right patterns. And both determine whether the portal actually replaces support requests or merely relocates them.

Why the integration decides whether the portal delivers

A customer portal without a connection to your systems of record is a brochure with a login. Customers sign in, see static content — and then call anyway, because the order status isn't there. This is exactly where self-service fails in practice: according to Gartner (2019), 70 percent of customers use a self-service channel at some point on their way to a resolution, but only 9 percent resolve their issue completely without live contact. The gap between those two numbers is rarely a frontend problem. It's the data behind it: order status, invoices, and delivery dates live in the ERP — and if the portal doesn't show them up to date, it just pushes the phone call back by ten minutes.

The MuleSoft Connectivity Benchmark 2025 confirms that integration is the real construction site: companies run an average of 897 applications, but only 29 percent of them are integrated with each other — and only 2 percent of organizations have more than half of their systems connected. A customer portal that simply gets parked next to the rest as application number 898 makes this problem worse. Scoped correctly, however, it becomes the first layer that makes your existing data consumable at all — first for customers, later for other systems too.

Identity first: SSO and roles with Keycloak

Before any data flows, the portal needs a solid answer to the question of who is actually accessing it. In B2B, this is more complicated than in consumer business: your customer isn't a person, it's an organization. The buyer is allowed to place orders, the service technician only sees maintenance contracts, accounting only sees invoices — and when someone leaves the company, their access has to be revoked centrally, not in five systems one by one.

We solve this with Keycloak, an open-source identity server that we self-host in the EU. That's not an exotic choice: Keycloak has been an incubating project of the Cloud Native Computing Foundation since April 2023 and has been running in production for over eight years at organizations like Accenture, CERN, Cisco, and Hitachi. Documented references include FAPI-compliant API authorization for Japanese banks and the migration of Austria's business service portal with more than two million users — exactly the "external portal with many organizations" scale we're talking about here. We've covered what Keycloak does in detail in our Keycloak guide.

The identity layer handles three jobs in the portal: First, company accounts with multiple users and a role model per customer organization. Second, single sign-on — one login for the portal and neighboring systems, optionally federated with your customer's directory service (such as Entra ID), so their employees sign in with the company credentials they already use. Third, tenant isolation in the database: in our stack, Supabase Row Level Security enforces that customer A can never, under any circumstances, see customer B's data — at the database level, not just in application code. Why we use exactly this combination and what it costs to operate is covered in our field report on the Supabase-Keycloak stack.

One detail that gets underestimated in B2B projects again and again: identity has to be tied to the ERP's master data. Your customers know their customer number, not their portal user ID. If you model the mapping between portal accounts and ERP customer and contact numbers cleanly during onboarding, you save yourself a mountain of manual activation tickets later — and you lay the groundwork for deriving roles and approval levels from the system of record instead of maintaining them twice.

Four patterns for connecting ERP and CRM

There is no one-size-fits-all solution for the data flow between portal and legacy system — there are four basic patterns. Which one carries the load depends less on the portal than on two questions: What can your ERP deliver today — and how fresh does the data really need to be from the customer's point of view? A delivery date has to be correct the moment the customer looks it up. Last week's invoice can come from a nightly sync.

PatternHow it worksStrengthsLimitationsTypical use
Live access via APIThe portal queries the ERP interface in real time on every requestAlways current data, no duplicate storageThe ERP needs a robust API; the portal depends on the ERP's availability and response timeOrder status and inventory with modern ERPs (e.g., Dynamics 365 BC)
Synchronization (batch)Data is replicated periodically into the portal database (hourly to nightly)Works with almost any legacy system; the portal stays fast and independentData is minutes to hours old; reconciliation logic requiredInvoices, documents, master data; ERPs without a usable API
Event-basedThe ERP or middleware reports changes as events (webhooks, message queue)Near real-time without constant load on the ERPRequires event capability or middleware; higher upfront complexityStatus changes, shipping notifications, price changes
Integration layer (BFF)A dedicated backend bundles all patterns behind a clean, typed portal APIDecouples portal and ERP; patterns can be combined; a future ERP switch stays possibleAn additional component that has to be built and operatedOur standard setup; mandatory with multiple source systems

In practice, we almost always combine patterns: master data and invoices are synchronized, order status comes in live or via events, and everything runs through an integration layer that presents the portal with a single unified API. The portal then doesn't even know whether a piece of information comes from SAP, proALPHA, or a file share — and that's precisely the point: if you switch ERPs in five years, you swap out an adapter, not the portal.

A word on data sovereignty: synchronization creates a copy of customer data in the portal database. Under GDPR, that's unproblematic if three things are in place — EU hosting for the portal infrastructure, data minimization (replicate only the fields the portal displays), and a defined deletion path when a customer leaves. All three belong in the discovery phase, not in an addendum to the data processing agreement.

The read-first principle

The most common planning mistake is building the integration in both directions at once. Read access — the customer sees orders, invoices, delivery status — is low-risk: worst case, the portal shows slightly stale data. Write access — the customer triggers an order or an address change that lands in the ERP — touches business logic, validations, and, if things go wrong, your accounting.

That's why we build portals read-first: the first release shows existing data and already eliminates the most common calls ("Where's my order?", "Can you resend that invoice?"). Write operations follow as a second stage — and then not as a direct passthrough into the ERP, but as defined jobs sent to the integration layer, which validates, logs, and reports back cleanly to the customer if something fails. This dramatically reduces project risk and delivers measurable value within a few weeks, instead of a big-bang release many months later that gets judged by its first failed posting.

What your legacy system really needs to be capable of

The checklist is shorter than most IT leaders expect. Minimum: a way to get data out — an API, database access, or, if all else fails, a regular export. That's enough for synchronization and thus for a fully functional read-only portal. Better: a documented interface or event capability; then live data and, later, write operations are cleanly achievable. Not required: a "web-ready" ERP, a version upgrade before the project starts, or — worst of all — an ERP replacement. This also applies to the typical mid-market systems beyond SAP — whether proALPHA, abas, or a Dynamics installation that has grown over the years: what matters is data access, not the age of the user interface.

This explicitly includes systems that are already internal modernization candidates. A portal as a modern layer in front of a legacy ERP is often the most pragmatic first modernization step: customers get contemporary self-service while the core system keeps running untouched — and the integration layer built along the way later carries the step-by-step replacement of the legacy system. The reverse is also true: if your actual problem is the state of the core system and the portal would just be treating symptoms, we'll tell you so in the first conversation — then modernization is the project, not the portal.

What an integration costs

For context, our published price anchors: a customer portal with a roles-and-permissions model and a first ERP integration runs 20,000 to 60,000 euros with us. The range depends mainly on two factors: how many systems get connected and whether the ERP brings a usable interface or the integration layer has to do more translation work. A portal MVP with Keycloak login and a first self-service feature runs 8,000 to 20,000 euros — often the right way to prove the integration on a real use case before committing to the larger investment.

As of July 2026. All prices net of VAT. The ranges above are our published price anchors; all market figures in the text are attributed with source and year.

The next step

If a customer portal is on your roadmap, settle the integration question before selecting a vendor — with three answers: Which data do your customers need most urgently? Where does it live? And what can the system of record deliver today? These three answers determine pattern, effort, and timeline more reliably than any feature list. How we build customer portals — including our price table and make-or-buy framework — is documented in the open. Or we can walk through your system landscape together: in a free 30-minute intro call, ideally with your IT team at the table.

Frequently asked questions

Does our ERP need a modern REST API for a customer portal to connect to it?
No. An API makes live data easier, but it's not a prerequisite. To start, all you need is a way to get data out — database access or a regular export is enough for a synchronized, read-only portal. The integration layer translates between the legacy system and the portal. A documented interface or event capability only becomes important for write operations and real-time data.
What's the difference between live access and synchronization?
With live access, the portal queries the ERP directly on every request — the data is always current, but the portal depends on the ERP's availability and response time. With synchronization, data is copied periodically into the portal database; the portal stays fast and independent but shows data that is minutes to hours old. In practice, both patterns are combined depending on the type of data.
Why Keycloak for a customer portal's SSO?
Keycloak is an open-source identity server, a CNCF incubating project since April 2023, and in production at organizations including CERN, Cisco, and Austria's business service portal with more than two million users. For B2B portals, it delivers company accounts, role models per customer organization, and federation with customers' directory services — self-hosted in the EU and without per-user license fees that scale with your customer count.
Can a customer portal also write orders or changes back into the ERP?
Yes, but sensibly as a second expansion stage. Write operations touch the ERP's business logic and validations and need clean error handling. We don't implement them as a direct passthrough, but as defined jobs sent to the integration layer, which validates and logs them. The first release delivers read functionality — which already covers the most common customer requests, like order status and invoice copies.
How do you make sure customer A never sees customer B's data?
On three levels. Keycloak separates identities and organizations and assigns roles per customer account. In the database, Supabase Row Level Security enforces tenant isolation — every query is filtered at the database level, not just in application code. And the integration layer only ever releases data belonging to the signed-in organization. If one level fails, the other two still hold.
What happens to the portal if we switch ERPs later?
That's exactly what the integration layer is for: the portal never talks to the ERP directly, only to its own stable API. When you switch ERPs, the adapter behind that API gets rebuilt; the portal itself, the user accounts, and the customer experience remain unchanged. The integration thus becomes an investment that survives the system switch instead of being written off with it.

Sources

Related articles

Open for select projects

Let's talk about your project

Book a no-obligation call, send us an email, or use the form – we'd love to hear from you.

150+
Completed projects
15
Years of experience
8
Senior‑level team members