-
Notifications
You must be signed in to change notification settings - Fork 690
Support HTTP Authentication in HttpClient #3813
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
I tested Kerberos authentication using the krb5 available at https://formulae.brew.sh/formula/krb5. |
19ccf13 to
090e1c2
Compare
a6efd89 to
96aa2ba
Compare
reactor-netty-http/src/main/java/reactor/netty/http/client/JaasAuthenticator.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/SpnegoAuthProvider.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/SpnegoAuthProvider.java
Outdated
Show resolved
Hide resolved
8fcac3f to
a77c0a5
Compare
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
|
@violetagg |
|
This is so great! Looking forward to get this in :) |
|
I can provide some guidance around APIs and configuration. Not every kerberos-enabled client uses JAAS, therefore the direct Subject/SPNEGO token support should be provided |
|
@wendigo I was thinking of allowing users to implement the If I understood you correctly, you're suggesting that we should provide a way for users to directly supply a Subject, as in the example below: public class DirectSubjectAuthenticator implements SpnegoAuthenticator {
// ...
private Subject subject;
@Override
public Subject login() throws LoginException {
return subject;
}
// ...
}Would you be able to share a more concrete example or use case? |
|
Sure @raccoonback. I'd like to use reactor-netty in the trino CLI/JDBC/client libraries. We support delegated/constrained/unconstrained kerberos authentication. Relevant code is here: This is how we add it to the okhttp: https://github.com/trinodb/trino/blob/master/client/trino-client/src/main/java/io/trino/client/auth/kerberos/SpnegoHandler.java Configurability is important as we expose configuration that allows the user to pass remote service name, service principal name, whether to canonicalize hostname: https://github.com/trinodb/trino/blob/master/client/trino-client/src/main/java/io/trino/client/auth/kerberos/SpnegoHandler.java#L50C5-L54C48 |
|
@violetagg cc. @wendigo |
|
I'm currently on vacation. When I return I'll check it.
На нд, 27.07.2025 г. в 18:21 KOSEUNGBIN ***@***.***> написа:
… *raccoonback* left a comment (reactor/reactor-netty#3813)
<#3813 (comment)>
@violetagg <https://github.com/violetagg>
I think supporting not only JAAS-based authentication but also allowing
the user to provide a GSSCredential directly could improve configurability
and flexibility.
This would be especially useful in environments where JAAS is not
preferred or where credentials need to be managed programmatically.
What do you think about this direction?
cc. @wendigo <https://github.com/wendigo>
—
Reply to this email directly, view it on GitHub
<#3813 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAFKCVJR2CIDYFH4XV65ZID3KTU6LAVCNFSM6AAAAAB75EX2K6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTCMRUGQ4DSNBVGA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
@wendigo |
685924c to
b082661
Compare
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/JaasAuthenticator.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/SpnegoAuthProvider.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/SpnegoAuthProvider.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/SpnegoAuthProvider.java
Outdated
Show resolved
Hide resolved
|
@violetagg |
I'm just returning fro vacation, will check it in the next days or so |
|
@violetagg |
|
I will check this one ... just need to finalise some other tasks. |
17fbdbe to
723ac4b
Compare
reactor-netty-http/src/test/java/reactor/netty/http/client/HttpClientOperationsTest.java
Fixed
Show fixed
Hide fixed
reactor-netty-http/src/test/java/reactor/netty/http/client/HttpClientOperationsTest.java
Fixed
Show fixed
Hide fixed
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClient.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClient.java
Show resolved
Hide resolved
...or-netty-http/src/main/java/reactor/netty/http/client/HttpClientAuthenticationException.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConfig.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Show resolved
Hide resolved
Signed-off-by: raccoonback <kosb15@naver.com>
|
@violetagg |
Signed-off-by: raccoonback <kosb15@naver.com>
This change updates the httpAuthentication() method to require both a retry predicate and an authenticator, allowing users to customize when authentication retry should occur. Signed-off-by: raccoonback <kosb15@naver.com>
reactor-netty-http/src/main/java/reactor/netty/http/client/Http2WebsocketClientOperations.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/Http2WebsocketClientOperations.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClient.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClient.java
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClient.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientOperations.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/WebsocketClientOperations.java
Outdated
Show resolved
Hide resolved
reactor-netty-http/src/main/java/reactor/netty/http/client/WebsocketClientOperations.java
Show resolved
Hide resolved
Signed-off-by: raccoonback <kosb15@naver.com>
Signed-off-by: raccoonback <kosb15@naver.com>
Signed-off-by: raccoonback <kosb15@naver.com>
Signed-off-by: raccoonback <kosb15@naver.com>
|
@violetagg |
Signed-off-by: raccoonback <kosb15@naver.com>
|
@violetagg |
violetagg
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's also expose the number of authentication retries similar to reactor.netty.http.client.HttpClientInfos#redirectedFrom, it might be helpful when users need to decide whether want to continue the retry or not. What do you think?
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
Move retry limit check from HttpClientHandler to HttpClientOperations to ensure the response is delivered to the user when authentication retries are exhausted, rather than failing the entire request. Signed-off-by: raccoonback <kosb15@naver.com>
@violetagg |
Signed-off-by: raccoonback <kosb15@naver.com>
…latile update Signed-off-by: raccoonback <kosb15@naver.com>
…rd compatible Signed-off-by: raccoonback <kosb15@naver.com>
|
@violetagg |
reactor-netty-http/src/main/java/reactor/netty/http/client/HttpClientConnect.java
Outdated
Show resolved
Hide resolved
The AtomicInteger overhead is unnecessary for this use case. Added @SuppressWarnings annotation to suppress the non-atomic operation warning. Signed-off-by: raccoonback <kosb15@naver.com>
Document the authenticationRetryCount() method in the HTTP Authentication section, including usage examples and best practices for tracking authentication retry attempts. Signed-off-by: raccoonback <kosb15@naver.com>
|
@violetagg |
Summary
Add flexible HTTP authentication framework to
HttpClientwith support for custom authentication mechanisms including SPNEGO/Negotiate, OAuth, Bearer tokens, and Basic authentication.Changes
httpAuthentication- For immediate credential computationhttpAuthenticationWhen- For deferred credential retrievalKey Features
authenticationRetryCount()method in HttpClientInfos to track retry attemptsAuthentication Flow
Related Issue
Fixes #3079