[
https://issues.apache.org/jira/browse/ATLAS-5284?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
chaitali borole updated ATLAS-5284:
-----------------------------------
Description:
Background
* Implement JWT-based authentication across Atlas ecosystem components to
enable secure, token-based communication between servers and hooks.
Problem Statement
Servers:
* Atlas core server
* Notification Ingestion Server
Hooks/Libraries:
* Hive Hook
* atlas-notification & atlas-client libraries (used by Spark, Impala hooks)
Key Requirements:
Server-side (Atlas + Notification Server):
* Add /auth/token endpoint for JWT issuance (OAuth2 compliant)
* Validate JWT in all hook endpoints (/notification/ingest, /entities/*)
* Support configurable JWKS endpoint for public key rotation
* Fallback to Basic Auth during migration
Client-side (Hooks/Libraries):
* Update atlas-client to acquire/manage JWT tokens
* Add token refresh logic (cache + auto-renewal)
* Support client credentials flow for service accounts
* Graceful fallback to Basic Auth for legacy hooks
Security: Token expiry: as mentioned by user, rotation every 30min, audit
logging of auth failures.
Proposed solution:
Header-based authentication (high level)
* Optional mode controlled by atlas.authn.header.*.
* A trusted proxy sends username (and optionally roles) in configurable HTTP
headers.
* Atlas maps those headers into the Spring Security context so the user is
treated as logged in without Atlas validating a password or token (trust is on
the network / proxy).
JWT authentication (high level)
* Validates JWTs from Authorization: Bearer and/or a cookie using JWKS and/or a
public key from config (often aligned with Knox SSO settings).
* On success, Atlas puts a normal Spring Security principal on the context;
browsers may be sent to login if JWT auth is attempted but fails.
* Java clients can send Bearer tokens when atlas.jwt.source is set so the token
is loaded from env/file/credentials as configured.
3 types of sources are available -environment ,File and CRED file based token
provision
Acceptance Criteria:
* Everything is additive by default. Header auth stays off until
atlas.authn.header.enabled=true and the right headers are set. With the flag
false, that filter does not establish a user; the rest of the chain behaves as
before.
* Existing authentications works as expected when header based is enabled
* JWT runs only when a request “looks like” JWT. The wrapper runs JWT handling
when there is no existing authenticated user and the request has a Bearer
header or the configured JWT cookie. API clients and browsers that never send
those stay on the previous login / SSO / basic / Kerberos paths.
* Filter order keeps earlier mechanisms first. Header pre-auth → Knox SSO →
then JWT wrapper (after Knox), then the same Basic / Kerberos / CSRF wiring as
today. Anything that already authenticates you before JWT runs is left alone.
* Audit / request id: If header pre-auth does not set a request id, AuditFilter
still falls back to a new UUID per request, like today.
* Java clients: AtlasBaseClient only switches to JWT + Bearer when
atlas.jwt.source is set. If that property is absent, client behavior matches
the old Kerberos / TLS / basic-auth logic.
was:
Background
* Implement JWT-based authentication across Atlas ecosystem components to
enable secure, token-based communication between servers and hooks.
Problem Statement
Servers:
* Atlas core server
* Notification Ingestion Server
Hooks/Libraries:
* Hive Hook
* atlas-notification & atlas-client libraries (used by Spark, Impala hooks)
Key Requirements:
Server-side (Atlas + Notification Server):
* Add /auth/token endpoint for JWT issuance (OAuth2 compliant)
* Validate JWT in all hook endpoints (/notification/ingest, /entities/*)
* Support configurable JWKS endpoint for public key rotation
* Fallback to Basic Auth during migration
Client-side (Hooks/Libraries):
* Update atlas-client to acquire/manage JWT tokens
* Add token refresh logic (cache + auto-renewal)
* Support client credentials flow for service accounts
* Graceful fallback to Basic Auth for legacy hooks
Security: Token expiry: as mentioned by user, rotation every 30min, audit
logging of auth failures.
Proposed solution:
* Header-based authentication (high level)
* Optional mode controlled by atlas.authn.header.*.
* A trusted proxy sends username (and optionally roles) in configurable HTTP
headers.
* Atlas maps those headers into the Spring Security context so the user is
treated as logged in without Atlas validating a password or token (trust is on
the network / proxy).
* JWT authentication (high level)
* Validates JWTs from Authorization: Bearer and/or a cookie using JWKS and/or a
public key from config (often aligned with Knox SSO settings).
* On success, Atlas puts a normal Spring Security principal on the context;
browsers may be sent to login if JWT auth is attempted but fails.
* Java clients can send Bearer tokens when atlas.jwt.source is set so the token
is loaded from env/file/credentials as configured.
3 types of sources are available -environment ,File and CRED file based token
provision
Acceptance Criteria:
* Everything is additive by default. Header auth stays off until
atlas.authn.header.enabled=true and the right headers are set. With the flag
false, that filter does not establish a user; the rest of the chain behaves as
before.
* Existing authentications works as expected when header based is enabled
* JWT runs only when a request “looks like” JWT. The wrapper runs JWT handling
when there is no existing authenticated user and the request has a Bearer
header or the configured JWT cookie. API clients and browsers that never send
those stay on the previous login / SSO / basic / Kerberos paths.
* Filter order keeps earlier mechanisms first. Header pre-auth → Knox SSO →
then JWT wrapper (after Knox), then the same Basic / Kerberos / CSRF wiring as
today. Anything that already authenticates you before JWT runs is left alone.
* Audit / request id: If header pre-auth does not set a request id, AuditFilter
still falls back to a new UUID per request, like today.
* Java clients: AtlasBaseClient only switches to JWT + Bearer when
atlas.jwt.source is set. If that property is absent, client behavior matches
the old Kerberos / TLS / basic-auth logic.
> Support JWT authentication for Atlas
> ------------------------------------
>
> Key: ATLAS-5284
> URL: https://issues.apache.org/jira/browse/ATLAS-5284
> Project: Atlas
> Issue Type: New Feature
> Components: atlas-core
> Affects Versions: 3.0.0, 2.4.0
> Reporter: chaitali borole
> Assignee: chaitali borole
> Priority: Major
>
> Background
> * Implement JWT-based authentication across Atlas ecosystem components to
> enable secure, token-based communication between servers and hooks.
> Problem Statement
> Servers:
> * Atlas core server
> * Notification Ingestion Server
> Hooks/Libraries:
> * Hive Hook
> * atlas-notification & atlas-client libraries (used by Spark, Impala hooks)
> Key Requirements:
> Server-side (Atlas + Notification Server):
> * Add /auth/token endpoint for JWT issuance (OAuth2 compliant)
> * Validate JWT in all hook endpoints (/notification/ingest, /entities/*)
> * Support configurable JWKS endpoint for public key rotation
> * Fallback to Basic Auth during migration
> Client-side (Hooks/Libraries):
> * Update atlas-client to acquire/manage JWT tokens
> * Add token refresh logic (cache + auto-renewal)
> * Support client credentials flow for service accounts
> * Graceful fallback to Basic Auth for legacy hooks
> Security: Token expiry: as mentioned by user, rotation every 30min, audit
> logging of auth failures.
> Proposed solution:
> Header-based authentication (high level)
> * Optional mode controlled by atlas.authn.header.*.
> * A trusted proxy sends username (and optionally roles) in configurable HTTP
> headers.
> * Atlas maps those headers into the Spring Security context so the user is
> treated as logged in without Atlas validating a password or token (trust is
> on the network / proxy).
> JWT authentication (high level)
> * Validates JWTs from Authorization: Bearer and/or a cookie using JWKS and/or
> a public key from config (often aligned with Knox SSO settings).
> * On success, Atlas puts a normal Spring Security principal on the context;
> browsers may be sent to login if JWT auth is attempted but fails.
> * Java clients can send Bearer tokens when atlas.jwt.source is set so the
> token is loaded from env/file/credentials as configured.
> 3 types of sources are available -environment ,File and CRED file based token
> provision
> Acceptance Criteria:
> * Everything is additive by default. Header auth stays off until
> atlas.authn.header.enabled=true and the right headers are set. With the flag
> false, that filter does not establish a user; the rest of the chain behaves
> as before.
> * Existing authentications works as expected when header based is enabled
> * JWT runs only when a request “looks like” JWT. The wrapper runs JWT
> handling when there is no existing authenticated user and the request has a
> Bearer header or the configured JWT cookie. API clients and browsers that
> never send those stay on the previous login / SSO / basic / Kerberos paths.
> * Filter order keeps earlier mechanisms first. Header pre-auth → Knox SSO →
> then JWT wrapper (after Knox), then the same Basic / Kerberos / CSRF wiring
> as today. Anything that already authenticates you before JWT runs is left
> alone.
> * Audit / request id: If header pre-auth does not set a request id,
> AuditFilter still falls back to a new UUID per request, like today.
> * Java clients: AtlasBaseClient only switches to JWT + Bearer when
> atlas.jwt.source is set. If that property is absent, client behavior matches
> the old Kerberos / TLS / basic-auth logic.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)