[ 
https://issues.apache.org/jira/browse/HBASE-29557?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nihal Jain updated HBASE-29557:
-------------------------------
    Description: 
Introduce a new module, hbase-auth-filters, that contains a minimal, copy of 
the Hadoop auth pieces HBase uses (e.g., AuthenticationFilter and required 
helpers). This decouples HBase’s server stack (web UI, REST, Thrift) from 
Hadoop’s javax-based auth so we can move to Jetty 12 EE10/Jakarta without being 
gated by Hadoop’s servlet/Jetty timeline.

*Motivation*
 - Jetty 9 is EOL; we completed the EE8 step with HBASE-29224 and want to move 
to EE10 (Jakarta) with HBASE-29542
 - Today our servers depend on Hadoop’s javax AuthenticationFilter. That ties 
our upgrade pace to Hadoop’s servlet/Jetty cadence.
 - By carrying a copy, we unblock HBase now and avoid future coordination 
bottlenecks.

*Proposed Change*
 - Add a new module: hbase-auth-filters
 - Copy only the minimal Hadoop auth classes HBase uses (AuthenticationFilter + 
small set of helpers).
 - Wire HBase web/REST/Thrift servers to use these classes and ensure we do not 
have any regression as we simply copy here.

*Pros*
 - Fully decouples HBase’s server stack from Hadoop’s servlet pace; clean 
Jakarta path for HBASE-29542.
 - Avoids being perpetually tied to Hadoop’s Jetty/servlet cadence.
 - Interoperability is preserved with:
 -- Current Hadoop lines that remain on javax, and
 -- Future Hadoop lines that move to Jakarta

*Compatibility/Support Notes*
 - Server-internal change only; no wire or client API changes expected.
 - Allows HBase to support Hadoop versions on javax today and those on Jakarta 
in the future without forcing a drop of javax-era Hadoop immediately when 
Hadoop switches.
 - If/when Hadoop publishes Jakarta-native auth, we can evaluate switching to 
their artifacts; because we’re decoupled, that can be done on our schedule.

*Cons/Risks*
 - We must track upstream fixes in the copied classes.
 - Mitigation: keep the surface area minimal; periodically review for 
security/bug fixes. These classes have historically been relatively stable.

*Alternatives (not chosen here)*
 - Shade/relocate Hadoop auth into a private package and rewrite javax→jakarta 
(hadoop-auth-shaded): avoids a source fork but retains coupling to Hadoop 
releases and requires re-shading on upstream changes.
 - Wait for Hadoop to move to Jakarta with HADOOP-19395: simplest short-term, 
but keeps HBase blocked on Hadoop’s schedule.

*Acceptance Criteria*
 - HBase servers start and operate on Jetty 12 EE8 using hbase-auth-filters as 
it were before
 - REST/Thrift/authn flows pass existing test suites (including Kerberos).
 - No regression in supported Hadoop versions due to this change.

*Follow-ups*
 - Switch to jakarta for the our (then) native auth filter and unblock 
HBASE-29542 without waiting for hadoop.

*Fix Version(s)*
 - Target: master, branch-3
 - Although, This can be backported to branch-2 as well, paving way for our 
future jetty migration path

*Class list identified for hbase-auth-filters*

Below is a minimal list of files we may have to copy from hadoop; a PoC will 
follow if others think this approach is worth investing our time in.

 {code}
>> grep -r "javax.servlet." src/main | cut -d: -f1 | sort | uniq

src/main/java/org/apache/hadoop/security/authentication/server/AltKerberosAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationFilter.java
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationToken.java
src/main/java/org/apache/hadoop/security/authentication/server/JWTRedirectAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/KerberosAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/LdapAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/MultiSchemeAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/server/PseudoAuthenticationHandler.java
src/main/java/org/apache/hadoop/security/authentication/util/CertificateUtil.java
src/main/java/org/apache/hadoop/security/authentication/util/FileSignerSecretProvider.java
src/main/java/org/apache/hadoop/security/authentication/util/RolloverSignerSecretProvider.java
src/main/java/org/apache/hadoop/security/authentication/util/SignerSecretProvider.java
src/main/java/org/apache/hadoop/security/authentication/util/ZKSignerSecretProvider.java
{code}

  was:
Introduce a new module, hbase-auth-filters, that contains a minimal, copy of 
the Hadoop auth pieces HBase uses (e.g., AuthenticationFilter and required 
helpers). This decouples HBase’s server stack (web UI, REST, Thrift) from 
Hadoop’s javax-based auth so we can move to Jetty 12 EE10/Jakarta without being 
gated by Hadoop’s servlet/Jetty timeline.

*Motivation*
 - Jetty 9 is EOL; we completed the EE8 step with HBASE-29224 and want to move 
to EE10 (Jakarta) with HBASE-29542
 - Today our servers depend on Hadoop’s javax AuthenticationFilter. That ties 
our upgrade pace to Hadoop’s servlet/Jetty cadence.
 - By carrying a copy, we unblock HBase now and avoid future coordination 
bottlenecks.

*Proposed Change*
 - Add a new module: hbase-auth-filters
 - Copy only the minimal Hadoop auth classes HBase uses (AuthenticationFilter + 
small set of helpers).
 - Wire HBase web/REST/Thrift servers to use these classes and ensure we do not 
have any regression as we simply copy here.

*Pros*
 - Fully decouples HBase’s server stack from Hadoop’s servlet pace; clean 
Jakarta path for HBASE-29542.
 - Avoids being perpetually tied to Hadoop’s Jetty/servlet cadence.
 - Interoperability is preserved with:
 -- Current Hadoop lines that remain on javax, and
 -- Future Hadoop lines that move to Jakarta

*Compatibility/Support Notes*
 - Server-internal change only; no wire or client API changes expected.
 - Allows HBase to support Hadoop versions on javax today and those on Jakarta 
in the future without forcing a drop of javax-era Hadoop immediately when 
Hadoop switches.
 - If/when Hadoop publishes Jakarta-native auth, we can evaluate switching to 
their artifacts; because we’re decoupled, that can be done on our schedule.

*Cons/Risks*
 - We must track upstream fixes in the copied classes.
 - Mitigation: keep the surface area minimal; periodically review for 
security/bug fixes. These classes have historically been relatively stable.

*Alternatives (not chosen here)*
 - Shade/relocate Hadoop auth into a private package and rewrite javax→jakarta 
(hadoop-auth-shaded): avoids a source fork but retains coupling to Hadoop 
releases and requires re-shading on upstream changes.
 - Wait for Hadoop to move to Jakarta with HADOOP-19395: simplest short-term, 
but keeps HBase blocked on Hadoop’s schedule.

*Acceptance Criteria*
 - HBase servers start and operate on Jetty 12 EE8 using hbase-auth-filters as 
it were before
 - REST/Thrift/authn flows pass existing test suites (including Kerberos).
 - No regression in supported Hadoop versions due to this change.

*Follow-ups*
 - Switch to jakarta for the our (then) native auth filter and unblock 
HBASE-29542 without waiting for hadoop.

*Fix Version(s)*
 - Target: master, branch-3
 - Although, This can be backported to branch-2 as well, paving way for our 
future jetty migration path

*Class list identified for hbase-auth-filters*

Below is a minimal list of files we may have to copy from hadoop; a PoC will 
follow if others think this approach is worth investing our time in.

{{grep -r "javax.servlet." src/main | cut -d: -f1 | sort | uniq}}
 * 
src/main/java/org/apache/hadoop/security/authentication/server/AltKerberosAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationFilter.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationToken.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/JWTRedirectAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/KerberosAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/LdapAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/MultiSchemeAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/server/PseudoAuthenticationHandler.java
 * 
src/main/java/org/apache/hadoop/security/authentication/util/CertificateUtil.java
 * 
src/main/java/org/apache/hadoop/security/authentication/util/FileSignerSecretProvider.java
 * 
src/main/java/org/apache/hadoop/security/authentication/util/RolloverSignerSecretProvider.java
 * 
src/main/java/org/apache/hadoop/security/authentication/util/SignerSecretProvider.java
 * 
src/main/java/org/apache/hadoop/security/authentication/util/ZKSignerSecretProvider.java


> Decouple dependency on Hadoop AuthenticationFilter classes
> ----------------------------------------------------------
>
>                 Key: HBASE-29557
>                 URL: https://issues.apache.org/jira/browse/HBASE-29557
>             Project: HBase
>          Issue Type: Improvement
>          Components: dependencies, jetty12, REST, security, Thrift, UI
>            Reporter: Nihal Jain
>            Assignee: Nihal Jain
>            Priority: Major
>
> Introduce a new module, hbase-auth-filters, that contains a minimal, copy of 
> the Hadoop auth pieces HBase uses (e.g., AuthenticationFilter and required 
> helpers). This decouples HBase’s server stack (web UI, REST, Thrift) from 
> Hadoop’s javax-based auth so we can move to Jetty 12 EE10/Jakarta without 
> being gated by Hadoop’s servlet/Jetty timeline.
> *Motivation*
>  - Jetty 9 is EOL; we completed the EE8 step with HBASE-29224 and want to 
> move to EE10 (Jakarta) with HBASE-29542
>  - Today our servers depend on Hadoop’s javax AuthenticationFilter. That ties 
> our upgrade pace to Hadoop’s servlet/Jetty cadence.
>  - By carrying a copy, we unblock HBase now and avoid future coordination 
> bottlenecks.
> *Proposed Change*
>  - Add a new module: hbase-auth-filters
>  - Copy only the minimal Hadoop auth classes HBase uses (AuthenticationFilter 
> + small set of helpers).
>  - Wire HBase web/REST/Thrift servers to use these classes and ensure we do 
> not have any regression as we simply copy here.
> *Pros*
>  - Fully decouples HBase’s server stack from Hadoop’s servlet pace; clean 
> Jakarta path for HBASE-29542.
>  - Avoids being perpetually tied to Hadoop’s Jetty/servlet cadence.
>  - Interoperability is preserved with:
>  -- Current Hadoop lines that remain on javax, and
>  -- Future Hadoop lines that move to Jakarta
> *Compatibility/Support Notes*
>  - Server-internal change only; no wire or client API changes expected.
>  - Allows HBase to support Hadoop versions on javax today and those on 
> Jakarta in the future without forcing a drop of javax-era Hadoop immediately 
> when Hadoop switches.
>  - If/when Hadoop publishes Jakarta-native auth, we can evaluate switching to 
> their artifacts; because we’re decoupled, that can be done on our schedule.
> *Cons/Risks*
>  - We must track upstream fixes in the copied classes.
>  - Mitigation: keep the surface area minimal; periodically review for 
> security/bug fixes. These classes have historically been relatively stable.
> *Alternatives (not chosen here)*
>  - Shade/relocate Hadoop auth into a private package and rewrite 
> javax→jakarta (hadoop-auth-shaded): avoids a source fork but retains coupling 
> to Hadoop releases and requires re-shading on upstream changes.
>  - Wait for Hadoop to move to Jakarta with HADOOP-19395: simplest short-term, 
> but keeps HBase blocked on Hadoop’s schedule.
> *Acceptance Criteria*
>  - HBase servers start and operate on Jetty 12 EE8 using hbase-auth-filters 
> as it were before
>  - REST/Thrift/authn flows pass existing test suites (including Kerberos).
>  - No regression in supported Hadoop versions due to this change.
> *Follow-ups*
>  - Switch to jakarta for the our (then) native auth filter and unblock 
> HBASE-29542 without waiting for hadoop.
> *Fix Version(s)*
>  - Target: master, branch-3
>  - Although, This can be backported to branch-2 as well, paving way for our 
> future jetty migration path
> *Class list identified for hbase-auth-filters*
> Below is a minimal list of files we may have to copy from hadoop; a PoC will 
> follow if others think this approach is worth investing our time in.
>  {code}
> >> grep -r "javax.servlet." src/main | cut -d: -f1 | sort | uniq
> src/main/java/org/apache/hadoop/security/authentication/server/AltKerberosAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationFilter.java
> src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/AuthenticationToken.java
> src/main/java/org/apache/hadoop/security/authentication/server/JWTRedirectAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/KerberosAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/LdapAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/MultiSchemeAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/server/PseudoAuthenticationHandler.java
> src/main/java/org/apache/hadoop/security/authentication/util/CertificateUtil.java
> src/main/java/org/apache/hadoop/security/authentication/util/FileSignerSecretProvider.java
> src/main/java/org/apache/hadoop/security/authentication/util/RolloverSignerSecretProvider.java
> src/main/java/org/apache/hadoop/security/authentication/util/SignerSecretProvider.java
> src/main/java/org/apache/hadoop/security/authentication/util/ZKSignerSecretProvider.java
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to