[
https://issues.apache.org/jira/browse/AMBARI-26623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jialiang Cai resolved AMBARI-26623.
-----------------------------------
Fix Version/s: 3.1.0
Assignee: Jialiang Cai
Resolution: Fixed
> Complete React authentication and application shell parity
> ----------------------------------------------------------
>
> Key: AMBARI-26623
> URL: https://issues.apache.org/jira/browse/AMBARI-26623
> Project: Ambari
> Issue Type: Bug
> Reporter: Jialiang Cai
> Assignee: Jialiang Cai
> Priority: Major
> Fix For: 3.1.0
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> h2. Problem
> The React frontend does not yet provide a reliable authentication and
> application-shell boundary equivalent to the classic Ember UI.
> Authentication, server-session recovery, protected routing, landing-page
> selection, session lifecycle handling, persisted user settings, and global
> shell behavior are either incomplete or split across unrelated components.
> The current implementation selects the login page from a one-time
> {{window.location.hash}} snapshot and mounts the router only after cluster
> initialization. An unauthenticated request to a protected URL can therefore
> remain on the loading screen. The {{/main}} and {{/installer}} trees do not
> share an authentication guard, authorization failures can still establish a
> client-side session, and usernames are URL-encoded by both the context and
> API layers.
> This issue covers the complete non-Metrics Auth/Shell module defined by the
> classic UI baseline. Metrics pages are not part of the scope; an existing
> Metrics route may only be referenced as a landing route.
> h2. Scope
> * Establish a single router-driven boundary between public login routes and
> the authenticated application.
> * Support local Basic authentication, Knox/external JWT redirection,
> {{/login/local}}, redirect-loop protection, and server-authenticated session
> recovery through the {{User}} response header.
> * Load the user, privileges, and authorizations before declaring the session
> authenticated. Treat any required authorization-loading failure as a failed
> session.
> * Load and display the login message of the day when enabled, while allowing
> login to continue when the setting is absent, invalid, or unavailable.
> * Select the initial destination for installed clusters, incomplete
> installation, users with only View privileges, and Ambari administrators with
> no cluster.
> * Preserve and restore only normalized same-origin application paths. Reject
> protocol-relative, absolute, and login targets.
> * Consolidate logout, local-state cleanup, polling teardown, and server
> logoff behavior.
> * Add the authenticated-session keep-alive lifecycle.
> * Load global shell state in the correct order and avoid initializing full
> cluster operations for View-only users.
> * Apply authentication and authorization checks independently to navigation
> visibility and direct route access.
> * Implement document-title updates, cached About information, and actionable
> global loading/error states.
> * Implement administrator and read-only inactivity timeouts, the 60-second
> warning, continue/sign-out actions, activity monitoring, and wizard/upgrade
> exclusions.
> * Implement the Experimental page, persisted support flags, and Reset UI
> States with its separate persisted-data permission.
> * Complete User Settings for background-operation preference, timezone, and
> current cluster/View privileges while preserving the classic UI's distinct
> visibility, handler, and persistence permission checks.
> * Block the Installer on a packaged web-client/server version mismatch when a
> client version is available.
> h2. Classic UI Baseline
> The acceptance baseline is
> {{docs/frontend-refactor/ember-baseline/01-auth-shell.md}}, feature IDs
> {{AUTH-001}} through {{AUTH-008}} and {{SHELL-001}} through {{SHELL-009}}.
> The React gap analysis is recorded in
> {{docs/frontend-refactor/react-current/01-auth-shell-gap.md}}.
> The authoritative network comparison must include all of the following
> classic contracts rather than only matching API file names:
> * {{POST /api/v1/auth}}
> * {{GET /api/v1/users/{userName}}} with privileges
> * {{GET /api/v1/users/{userName}/authorizations}}
> * {{GET /api/v1/users/{userName}/privileges}}
> * {{GET /api/v1/clusters}} for authentication, cluster state, and keep-alive
> * {{GET /api/v1/settings/motd}}
> * {{GET /api/v1/logout}}
> * {{GET /api/v1/services/AMBARI/components/AMBARI_SERVER}} for properties and
> version
> * {{GET}} and {{POST /api/v1/persist[/key]}}
> * Ambari Admin View browser navigation
> h2. Acceptance Criteria
> * Visiting {{/}}, {{/main/...}}, or {{/installer/...}} without an
> authenticated server session routes to {{/login}} and safely preserves an
> eligible target.
> * A valid local login sends UTF-8 Basic credentials and URL-encodes the
> username exactly once at the URL boundary.
> * User data, privileges, and authorizations must all load before protected
> content is rendered.
> * A server-authenticated user with empty local storage is restored from the
> {{User}} response header.
> * Authentication responses with {{jwtProviderUrl}} redirect to the provider
> with the current URL as the return target, except on {{/login/local}};
> repeated redirects stop with a visible recovery path.
> * An enabled message of the day requires acknowledgment before navigation.
> Missing, malformed, disabled, or failed MOTD retrieval does not block login.
> * Landing behavior is correct for installed clusters, incomplete
> installation, no-cluster Ambari administrators, and View-only users.
> * Restored targets are internal normalized hash paths and never
> protocol-relative or absolute URLs.
> * Logout stops session-owned work, clears local UI state, attempts server
> logoff, and reaches login even when logoff fails.
> * Keep-alive starts only for an authenticated application and stops on
> unmount or logout.
> * Navigation visibility and direct route entry each enforce their required
> permissions.
> * Inactivity handling selects the administrator or read-only timeout, warns
> 60 seconds before expiration, supports continue/sign out, monitors the window
> and accessible iframes, and skips wizard and stack-upgrade routes.
> * About uses the server version cached during initialization and displays
> {{N/A}} when unavailable without a click-time request.
> * User Settings loads and saves background-operation preference and timezone
> and displays cluster/View privileges under the documented permission gates.
> * Experimental support flags can be loaded, edited, saved, canceled, and
> reset under the documented permission gates.
> * A packaged client/server version mismatch blocks the Installer and displays
> both versions.
> * Unit tests cover authentication branches, authorization failure, URL
> normalization, landing selection, permission gates, logout failure,
> inactivity behavior, and persisted settings.
> * Runtime validation covers local Basic auth, Knox JWT, server-session
> recovery, each landing mode, administrator/read-only inactivity, MOTD
> variants, logout failure, Admin View navigation, and a packaged version
> mismatch.
> h2. Out of Scope
> * Metrics dashboards, charts, widgets, and Metrics data APIs.
> * AngularJS Ambari Admin Console implementation. This issue only covers
> navigation into the existing Admin View.
> * Feature work belonging to Hosts, Services, Alerts, Upgrades, Installer
> steps, Kerberos, or HA beyond the shell entry and lifecycle behavior
> described above.
> h2. Compatibility Decisions
> The React implementation must not reproduce known unsafe or failure-prone
> classic UI behavior:
> * Protocol-relative preferred paths such as {{//host/path}} are rejected even
> though the classic prefix check accepts them.
> * User and privilege data are not sufficient to establish a session when the
> authorization request fails.
> * A plain business-operation {{403 Forbidden}} is not treated as proof that
> the authenticated session expired.
> * Client logout and lifecycle teardown do not wait for successful server
> logoff.
> * Reset UI States does not erase recoverable local wizard data until the
> server-side wizard owner reset succeeds.
> These are intentional compatibility corrections, not missing parity.
> h2. Verification Boundary
> The module is not complete based on static code or unit tests alone. All
> feature IDs remain {{NEEDS_RUNTIME_VALIDATION}} until the runtime matrix in
> {{docs/frontend-refactor/react-current/01-auth-shell-gap.md}} is executed
> against real Ambari Server, Knox, Admin View, packaged web-client versions,
> and representative permission roles.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]