[
https://issues.apache.org/jira/browse/KNOX-3175?focusedWorklogId=977108&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-977108
]
ASF GitHub Bot logged work on KNOX-3175:
----------------------------------------
Author: ASF GitHub Bot
Created on: 31/Jul/25 13:45
Start Date: 31/Jul/25 13:45
Worklog Time Spent: 10m
Work Description: smolnar82 opened a new pull request, #1070:
URL: https://github.com/apache/knox/pull/1070
## What changes were proposed in this pull request?
This PR simplifies and modernizes the `JWTFederationFilter` implementation
by replacing the manual parsing of the HTTP request body with the more
idiomatic usage of `HttpServletRequest.getParameter(...)`. It also updates the
related unit tests accordingly.
**Simplified client credentials handling:**
- Removed custom logic to read and parse the request body
`(getRequestBodyString(...)` and
`RequestBodyUtils.getRequestBodyParameter(...))`.
- Replaced it with calls to `request.getParameter(...)`, leveraging the
Servlet API to extract parameters from form-encoded POST requests.
**Improved client secret validation logic:**
- Ensured that passing client_secret via query parameters is explicitly
blocked, with an appropriate exception message.
**Refactored test cases:**
- Updated tests to align with the new `getParameter(...)`-based logic.
- Replaced `getInputStream()` mocking with expectations for
`getParameter(...)` and `getQueryString()`.
- Introduced helper methods (e.g., `ensureClientCredentials(...)`) to
improve readability and reusability of test logic.
## How was this patch tested?
Built the project and ran unit tests.
Executed the same `beeline` queries which I used to reproduce the issue in
the first place.
1. Using a JWT Token
```
beeline -u
'jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive'
-n Token -p
eyJqa3UiOiJodHRwczovL2NjeWNsb3VkLTEuc21vbG5hci5yb290LmNvbW9wcy5zaXRlOjg0NDMvZ2F0ZXdheS9ob21lcGFnZS9rbm94dG9rZW4vYXBpL3YyL2p3a3MuanNvbiIsImtpZCI6IjBzQXZlbDc5eTdvbTU3ZmF2RDBvRFczeDlteUJhRU5FYW4tQm5LTFAxT2MiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJrbm94dWkiLCJhdWQiOiJjZHAtcHJveHktdG9rZW4iLCJqa3UiOiJodHRwczovL2NjeWNsb3VkLTEuc21vbG5hci5yb290LmNvbW9wcy5zaXRlOjg0NDMvZ2F0ZXdheS9ob21lcGFnZS9rbm94dG9rZW4vYXBpL3YyL2p3a3MuanNvbiIsImtpZCI6IjBzQXZlbDc5eTdvbTU3ZmF2RDBvRFczeDlteUJhRU5FYW4tQm5LTFAxT2MiLCJpc3MiOiJLTk9YU1NPIiwiZXhwIjoxNzU0MDM5NjgwLCJtYW5hZ2VkLnRva2VuIjoidHJ1ZSIsImtub3guaWQiOiI0MGE0ZjJmMy1iNTU1LTQ4ODEtYWY1Ni02Njg1NTM1MzIwODUifQ.dBMzOExmhc_Fz-RBCvJhzUXRcFdznqf5QBcwqRxpIH4UnRG3Qd_qxSvGA5rE1WMszsOOg9J2Q6wMapWI7TcMdAmMupU-2Jt5k2Kdieer2htOmckgiB7Qf_6qXuaUzZUV_rItr94GdWo4tRXOGy72c-EEjmNjgViXojZkfMJaM_gJunUY1cM9VZAFZTZfHZrKJTOa_EJ-VzvDHc-je3laxkVnfA6u2NhRabVkX--iXjTlNgs_ZeilgWQeg7m2aAALp5LfNetMgN97VM3hAY6FCfULlBkHLAl1dZDlf2U1P158FYs4bU8proXHs0fOVTQG_Z6JtL3qnfxs9SEAmSGn66ZxFWwqC9TBkdgHJ8JN37F6in_QcJLr6oD_QGDOm_ashJM_uM5D3sPrkjd46Yv9IJZnltYW8KsvRHBiRZ-sG55vyWE3tlT4H8LwD4KTvO_UKR_9Q2-EMBiSpl5D85Tb0f3AeyIgV9R9c7LpETukF0qPKeyPh260WEsyZtD4cfPa
-f test.sql
SLF4J: Class path contains multiple SLF4J bindings.
...
Connecting to
jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive
Connected to: Apache Hive (version 3.1.3000)
Driver: Hive JDBC (version 3.1.3000)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://HIVE_HOST> SHOW TABLES;
INFO : Compiling
command(queryId=hive_20250731132544_463084af-2553-47b1-9532-c6deff5a4ae2): SHOW
TABLES
INFO : Semantic Analysis Completed (retrial = false)
INFO : Created Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name,
type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling
command(queryId=hive_20250731132544_463084af-2553-47b1-9532-c6deff5a4ae2); Time
taken: 0.007 seconds
INFO : Executing
command(queryId=hive_20250731132544_463084af-2553-47b1-9532-c6deff5a4ae2): SHOW
TABLES
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing
command(queryId=hive_20250731132544_463084af-2553-47b1-9532-c6deff5a4ae2); Time
taken: 0.014 seconds
INFO : OK
+-----------+
| tab_name |
+-----------+
+-----------+
No rows selected (0.499 seconds)
0: jdbc:hive2://HIVE_HOST> Closing: 0:
jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive
```
2. Using a Passcode token
```
beeline -u
'jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive'
-n Passcode -p
TkRCaE5HWXlaak10WWpVMU5TMDBPRGd4TFdGbU5UWXROalk0TlRVek5UTXlNRGcxOjpaVE14WkdFM016TXRNRFV3TnkwME5tVmtMVGd6WlRJdFptWTRZamMzWWpRNFpqTXo=
-f test.sql
...
Connecting to
jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive
Connected to: Apache Hive (version 3.1.3000)
Driver: Hive JDBC (version 3.1.3000)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://HIVE_HOST> SHOW TABLES;
INFO : Compiling
command(queryId=hive_20250731132524_3d5498d8-7aa4-4f36-bdae-eb8c70e6a159): SHOW
TABLES
INFO : Semantic Analysis Completed (retrial = false)
INFO : Created Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name,
type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling
command(queryId=hive_20250731132524_3d5498d8-7aa4-4f36-bdae-eb8c70e6a159); Time
taken: 0.01 seconds
INFO : Executing
command(queryId=hive_20250731132524_3d5498d8-7aa4-4f36-bdae-eb8c70e6a159): SHOW
TABLES
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing
command(queryId=hive_20250731132524_3d5498d8-7aa4-4f36-bdae-eb8c70e6a159); Time
taken: 0.075 seconds
INFO : OK
+-----------+
| tab_name |
+-----------+
+-----------+
No rows selected (0.558 seconds)
0: jdbc:hive2://HIVE_HOST> Closing: 0:
jdbc:hive2://KNOX_HOST:8443/;ssl=true;sslTrustStore=gateway-client-trust.jks;trustStorePassword=changeit;transportMode=http;httpPath=gateway/token/hive
```
Issue Time Tracking
-------------------
Worklog Id: (was: 977108)
Remaining Estimate: 0h
Time Spent: 10m
> Client credential flow validation drains request body
> -----------------------------------------------------
>
> Key: KNOX-3175
> URL: https://issues.apache.org/jira/browse/KNOX-3175
> Project: Apache Knox
> Issue Type: Bug
> Components: Server
> Affects Versions: 2.0.0
> Reporter: Sandor Molnar
> Assignee: Sandor Molnar
> Priority: Critical
> Fix For: 2.1.0
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Testing a simple Passcode token flow between Knox and Hive (using beeline)
> constantly fails because the authentication challenge is aborted due to Knox
> cuts the connection during that operation.
> The reason for that is that Knox consumes the entire request body to find out
> if this is a Client Credentials flow. We don't need to read those parameters
> from the request body because Servlet API extracts parameters from
> form-encoded POST requests (which is the case for OAuth flows).
> We should also preserve the check we added in the scope of KNOX-3037: the
> client secret parameter MUST NOT be present as a query param.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)