Console terminology: In the Maverics Console, the combination of applications,
policies, headers, and connector bindings is managed through User Flows. In
YAML, these elements are configured directly within each app’s configuration block
under
apps[].policies[].Overview
The proxy app type is the most common application type in the Orchestrator. It acts as an identity-aware reverse proxy in HTTP Proxy mode, forwarding requests to a backend after applying authentication and authorization policies. Route patterns determine which incoming traffic matches the app, policies enforce authentication at specific URL paths, and headers inject identity attributes into upstream requests.How It Works
The HTTP Proxy request flow follows these steps:- Traffic interception — The Orchestrator listens on configured route patterns (hostname/path combinations) and intercepts all matching HTTP requests before they reach the upstream application.
- Policy evaluation — Each request is matched against location-based policies. The Orchestrator determines which authentication and authorization rules apply based on the request path.
- User authentication — If the user is not authenticated (no valid session), the Orchestrator redirects them to the configured identity provider. After successful authentication, a session cookie is established.
- Authorization check — The Orchestrator evaluates authorization rules against the authenticated user’s attributes. Rules use
and/orconditions with operators likeequals,contains, etc. Unauthorized users are redirected or receive a 403 response. - Header injection — For authorized requests, the Orchestrator injects identity headers (e.g.,
SM_USER,X-Remote-User) into the upstream request using template syntax ({{ connector.claim }}). The upstream application receives these headers and uses them for its own identity decisions. - Proxying and response — The request (with injected headers) is forwarded to the upstream backend. The response flows back through the Orchestrator to the client. Optional Service Extensions can modify the request or response at this stage.
Use Cases
- Protecting legacy apps without code changes — deploy the Orchestrator in front of applications that lack modern authentication support, adding SSO and MFA without modifying application code
- Header-based authentication injection — inject identity headers like
SM_USER,REMOTE_USER, orX-Remote-Userinto upstream requests, enabling SiteMinder-to-modern-IdP migration with zero backend changes - Session management for stateless apps — the Orchestrator manages user sessions and authentication state on behalf of backend applications that do not track sessions themselves
- Combining with LDAP Provider for legacy stacks — pair proxy apps with an LDAP attribute provider to load additional user attributes from a directory and inject them as headers, bridging legacy LDAP-dependent applications to modern identity providers
Key Concepts
Route Patterns and Upstreams
Route patterns define which traffic the proxy intercepts. Each proxy app maps one or more hostname/path patterns to an upstream backend URL. The Orchestrator acts as a transparent reverse proxy — the client connects to the Orchestrator, and the Orchestrator forwards to the backend.Header Injection
Header injection is the primary mechanism for passing identity to legacy applications. Using{{ connector.claim }} template syntax, the Orchestrator maps claims from identity providers into HTTP headers that the upstream application expects. This replaces legacy access management products like SiteMinder without changing the application.
Location-Based Policies
Unlike OIDC and SAML modes where authorization is per-app, HTTP Proxy supports location-based policies. Different URL paths within the same application can have different authentication requirements and authorization rules. For example,/ might allow all authenticated users while /admin requires a specific role.
Session Management
The Orchestrator manages sessions for proxied applications using cookies. This is critical for applications that lack their own session management. Session configuration (cookie name, lifetime, idle timeout) is defined at the global level and applies to all proxy apps.Upstream Login
Some legacy applications have their own login flows in addition to the identity headers. The upstream login feature automates posting credentials to the upstream’s login form after the Orchestrator has authenticated the user, handling the “double login” problem.Setup
- Console UI
- Configuration
Navigate to Applications
Go to Applications in the sidebar and click Create. Select Proxied App from the application type list.
Set the application name
Enter a Name to identify this application. This name appears in the Console and is used in User Flow bindings.
Set the upstream URL
Enter the Upstream URL — the backend server the Orchestrator forwards requests to after authentication (e.g.,
https://internal-hr.example.com).Add route patterns
Click Route Pattern to add URL patterns that map incoming requests to this app. Patterns support hostnames (
example.com), paths (/app), or both (example.com/app).Configure TLS settings
Optionally set a CA Path for self-signed certificates on the upstream. Enable Skip TLS Verification only for testing.
Configure mTLS (optional)
For upstream servers requiring client certificate authentication, provide the TLS Cert and TLS Key file paths or secret provider references.
Set the unauthorized page
Optionally enter an Unauthorized Page URL where users are redirected when a policy evaluation denies access (e.g.,
https://example.com/403).Configure preserve host
Enable the Preserve Host toggle to keep the original Host header on proxied requests. Enable this when the upstream expects the original hostname (e.g., behind another reverse proxy like Apache).
Configure logout settings (optional)
Set the Logout Callback URL — the endpoint that facilitates logout for application users. Optionally set the Post Logout Redirect URL for where users go after successful logout.
Troubleshooting
Headers not arriving at the upstream application
Headers not arriving at the upstream application
Symptoms: The upstream application does not see injected headers. User identity is missing from the request.Causes:
- Header template syntax error — missing
{{ }}delimiters or incorrect spacing. - Connector name typo in the template (e.g.,
{{ my_idp.email }}when the connector is namedmy-idp). - The upstream application or an intermediate proxy is stripping custom or
X-headers.
- Verify template syntax uses the
{{ connector.attribute }}format exactly, with double curly braces and a dot separator. - Confirm the connector name in the template matches a
connectors[].nameentry in your configuration. - Check whether the upstream application or any intermediate load balancer strips custom headers. Some application servers discard headers with underscores or specific prefixes by default.
Authentication redirect loop
Authentication redirect loop
Symptoms: The browser loops endlessly between the Orchestrator and the identity provider, never completing authentication.Causes:
- Session cookie domain mismatch — the cookie is set for a domain that does not cover the Orchestrator’s hostname.
- The IdP callback URL does not match the
oauthLoginRedirect.urlsconfigured on the connector. - The
routePatternsdo not cover the callback path, so the Orchestrator does not intercept the callback.
- Verify
session.cookie.domaincovers the Orchestrator’s hostname (e.g.,.example.comforapp.example.com). - Ensure the callback URL registered at the IdP is listed in
oauthLoginRedirect.urlson the connector. - Check that
routePatternsinclude the callback path so the Orchestrator can process the authentication response.
403 Forbidden for authorized users
403 Forbidden for authorized users
Upstream connection refused or timeout
Upstream connection refused or timeout
Symptoms: 502 Bad Gateway or connection timeout after the user successfully authenticates.Causes:
- The
upstreamURL is unreachable from the Orchestrator host. - TLS certificate mismatch on the upstream — the Orchestrator cannot verify the upstream’s certificate.
- Wrong port in the
upstreamURL.
- Verify the Orchestrator can reach the upstream URL from its host (test with
curlor equivalent). - If using HTTPS for the upstream, check the TLS profile configuration and ensure the upstream’s certificate is trusted.
- Confirm the port in the
upstreamURL matches the port the backend application is listening on.
Session expires too quickly
Session expires too quickly
Symptoms: Users are forced to re-authenticate frequently, even during active use.Causes:
session.lifetime.idleTimeoutormaxTimeoutis set too low for the expected user activity pattern.- A load balancer in front of multiple Orchestrator instances is not using sticky sessions, causing requests to hit instances that do not have the user’s session.
- Adjust
session.lifetime.idleTimeoutandsession.lifetime.maxTimeoutto match your expected user session duration. - Configure sticky sessions on the load balancer using the
maverics_sessioncookie so that requests from the same user are routed to the same Orchestrator instance.
Related Pages
Applications
Overview of application types, route patterns, and shared configuration
HTTP Proxy
HTTP Proxy mode configuration for proxy app deployments
Identity Fabric
Configure the identity providers referenced in app policies
Authorization
Authorization rules, operators, and rule aggregation
Service Extensions
Custom request/response modification via Service Extensions
Transport Layer Security (TLS)
Named TLS profiles for upstream connections