The obvious option was to reuse what the Asserter project had already built. There is an OCI IAM Identity Domain in place, federated to Entra ID, and registering an APEX application in it as an OIDC client is not hard. It would have put EBS and the portal behind one set of sign-on policies, which is the kind of consolidation that looks good on an architecture slide.
We did not do it, and the reason is a licensing limit rather than a technical one.
The domain is of type Oracle Apps Premium. That is not an arbitrary choice: the EBS Asserter is not available on the Free or Oracle Apps domain types at all, so an EBS SSO project lands you on Oracle Apps Premium or Premium by definition. Oracle Apps Premium is priced for exactly this shape of use case, per user per month, and it is deliberately constrained on everything that is not an Oracle application.
The constraint that matters here is the object limit for non-Oracle apps. Oracle Apps Premium is documented at 10, against 5,000 for a Premium domain. And the definition is explicit: custom-developed applications count, with applications built using APEX named in the documentation as an example. Applications built with Visual Builder do not count. Whatever the reasoning behind that distinction, the effect is that an APEX portal consumes one of a very small number of slots.
Except it does not consume one slot. It consumes three. DEV, QAT and PROD are separate confidential applications in the domain, each with its own client ID, secret and redirect URLs. One logical application, three registrations. Add a second APEX application on the same estate and you are at six of ten before anything unusual has happened. The limit stops being theoretical much faster than the number suggests.
Two footnotes to that, both worth knowing:
The limit is currently not enforced for Oracle Apps and Oracle Apps Premium domains, and Oracle states in the same documentation that it will be enforced in future. So you can register more than ten today and nothing will stop you. Building an architecture whose viability depends on an announced limit continuing not to be enforced is a bet with a due date, and the due date is set by somebody else.
You can also change the domain type to Premium, which lifts the limit to 5,000. But the domain type is a property of the domain, not of an individual application, so that decision reprices every user in it. Moving to Premium to accommodate one APEX application means paying the Premium rate for the entire EBS user population, which is a large bill for a redirect.
And that is really the point. Weigh the cost against what the extra hop buys, and the answer is nothing. Every employee who signs in to the portal exists in Entra ID. The identity domain is federated to Entra ID, so their conditional access policies and MFA apply either way. Routing the portal through the domain would add a redirect, a second place to register clients and rotate secrets, and a component in the login path, in exchange for a control we already have at the other end.
One clarification, because it is easy to get this backwards. The Asserter integration itself does not consume a slot. EBS is an Oracle application, and supporting Oracle applications is the entire reason the Oracle Apps Premium domain type exists. The non-Oracle limit applies to third-party commercial software and to custom-built applications, which is precisely where an APEX portal lands. The scarce resource is not being spent on what the domain was bought for. It would only be spent on ours.