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
I searched in the issues and found nothing similar.
Motivation
Fluss currently supports built-in SASL/PLAIN authentication, and #3495 tracks SASL/OAUTHBEARER for deployments backed by OAuth2/OIDC. However, some deployments need password-based authentication without operating an external identity provider, while avoiding the weaknesses of sending the password in the SASL exchange and keeping recoverable plaintext credentials on the server.
SCRAM-SHA-256, standardized by RFC 7677, provides a salted challenge-response flow:
The client proves possession of the password without transmitting the password.
The server can store a salt, iteration count, StoredKey, and ServerKey instead of a recoverable plaintext password.
Client and server nonces provide replay resistance.
The client verifies the server signature, providing mutual authentication.
This would complement the existing PLAIN mechanism and the planned OAUTHBEARER mechanism. It is also useful for the Helm security configuration discussed in #2503, which already anticipates SCRAM as a selectable mechanism but currently has no native Fluss RPC implementation.
Solution
Add SCRAM-SHA-256 as a built-in SASL mechanism for the native Fluss RPC authentication layer.
Implement connection-local SCRAM client and server sessions using the existing RPC authentication token/challenge exchange. The multi-round SCRAM handshake should not require a protobuf change.
Introduce a server-side SCRAM credential representation containing the username, salt, iteration count, StoredKey, and ServerKey. The server should not require a recoverable plaintext password for authentication.
Define a minimal bootstrap/configuration path for precomputed SCRAM credentials. Dynamic credential management or an external credential-provider SPI can be evaluated separately if it would significantly expand the first PR.
Preserve existing SASL/PLAIN behavior, configuration, and compatibility.
Create the effective FlussPrincipal only after the client proof has been verified.
Use TLS as the transport-security layer. SCRAM-SHA-256-PLUS channel binding can be handled separately.
Suggested test coverage:
Successful authentication and server-signature verification.
Search before asking
Motivation
Fluss currently supports built-in SASL/PLAIN authentication, and #3495 tracks SASL/OAUTHBEARER for deployments backed by OAuth2/OIDC. However, some deployments need password-based authentication without operating an external identity provider, while avoiding the weaknesses of sending the password in the SASL exchange and keeping recoverable plaintext credentials on the server.
SCRAM-SHA-256, standardized by RFC 7677, provides a salted challenge-response flow:
StoredKey, andServerKeyinstead of a recoverable plaintext password.This would complement the existing PLAIN mechanism and the planned OAUTHBEARER mechanism. It is also useful for the Helm security configuration discussed in #2503, which already anticipates SCRAM as a selectable mechanism but currently has no native Fluss RPC implementation.
Solution
Add
SCRAM-SHA-256as a built-in SASL mechanism for the native Fluss RPC authentication layer.Client-side example:
Server-side example:
Proposed implementation direction:
StoredKey, andServerKey. The server should not require a recoverable plaintext password for authentication.FlussPrincipalonly after the client proof has been verified.SCRAM-SHA-256-PLUSchannel binding can be handled separately.Suggested test coverage:
Initial scope:
SCRAM-SHA-256mechanism.Anything else?
Related work:
Willingness to contribute