You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[fix][proxy] Refresh auth data if ProxyLookupRequests (apache#20067)
Fixes: apache#10816
PIP: apache#19771
Supersedes: apache#19026
Depends on: apache#20062
The Pulsar Proxy does not properly handle authentication data refresh when in state `ProxyLookupRequests`. The consequence is described in apache#10816. Essentially, the problem is that the proxy caches stale authentication data and sends it to the broker leading to connection failures.
apache#17831 attempted to fix the underlying problem, but it missed an important edge cases. Specifically, it missed the case that the `ConnectionPool` will have multiple connections when a lookup gets redirected. As such, the following problem exists (and is fixed by this PR):
1. Client opens connection to perform lookups.
2. Proxy connects to broker 1 to get the topic ownership info.
3. Time passes.
4. Client does an additional lookup, and this topic is on a newly created broker 2. In this case, the proxy opens a new connection with the stale client auth data.
5. Broker 2 rejects the connection because it fails with expired authentication.
* Remove some of the implementation from apache#17831. This new implementation still allows a broker to challenge the client through the proxy, but notably, it limits the number of challenges sent to the client. Further, the proxy does not challenge the client when the auth data is not expired.
* Introduce authentication refresh in the proxy so that the proxy challenges the client any time the auth data is expired.
* Update the `ProxyClientCnx` to get the `clientAuthData` from the `ProxyConnection` to ensure that it gets new authentication data.
* Add clock skew to the `AuthenticationProviderToken`. This is necessary to make some of the testing not flaky and it will also be necessary for users to configure in their clusters.
The `ProxyRefreshAuthTest` covers the existing behavior and I expanded it to cover the edge case described above.
Additionally, testing this part of the code will be much easier to test once we implement apache#19624.
- [x] `doc-not-needed`
PR in forked repository: the relevant tests pass locally, so I am going to skip the forked tests.
(cherry picked from commit 075b625)
Copy file name to clipboardexpand all lines: pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java
+21-1
Original file line number
Diff line number
Diff line change
@@ -73,6 +73,9 @@ public class AuthenticationProviderToken implements AuthenticationProvider {
73
73
74
74
// The token audience stands for this broker. The field `tokenAudienceClaim` of a valid token, need contains this.
0 commit comments