-
Notifications
You must be signed in to change notification settings - Fork 3.8k
CEP-50/CASS-20834: Enable IAuthenticator to declare supported and alterable role options #4427
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: trunk
Are you sure you want to change the base?
Conversation
|
|
||
| /** | ||
| * Resets the initialized flag, enabling AuthConfig to be reconfigured multiple times within a single | ||
| * test case. |
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.
Specifically, see AuthConfigTest in this same PR.
|
|
||
| /** | ||
| * Returns the authenticator configured for this node. | ||
| */ |
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.
In the future this will become getDefaultAuthenticator(). Additional methods will be added to enable/disable negotiation and provide access to the node's supported authenticators.
|
|
||
| /** | ||
| * Indicates if this node uses an authenticator that requires authentication. | ||
| */ |
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.
In the future, the semantics will change from "'The' authenticator requires authentication" to "Any supported authenticator requires authentication." Existing callers to this method should be unaffected by that change.
| } | ||
|
|
||
| @After | ||
| public void teardown() { |
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.
brace on new line please
|
|
||
| public CassandraRoleManager(Map<String, String> parameters) | ||
| { | ||
| supportedOptions = DatabaseDescriptor.getAuthenticator() instanceof PasswordAuthenticator |
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.
can you please rebase this patch on top of current trunk? This constructor was changed in CEP-55 by conditionally adding Option.OPTIONS among supportedOptions if there is some specific role name generator.
|
|
||
| IAuthenticator authenticator = DatabaseDescriptor.getAuthenticator(); | ||
| if (authenticator instanceof PasswordAuthenticator) | ||
| this.passwordAuthenticatorOptional = Optional.of((PasswordAuthenticator) authenticator); |
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.
I think now we have the opportunity to change name of this variable to maybePasswordAuthenticator. If you check the codebase, naming like this is more prevalent and reads better.
We also do not need this. here. There is no ambiguity as in what field we are setting.
…RA-20834) With negotiated authentication (CEP-50), nodes may be configured with multiple authenticators. Prior to this change, a number of areas in the code assumed that there was a single configured authenticator and contained logic that switched depending on the authenticator type. This logic won't work when multiple authenticators can be configured. This change eliminates most calls to DataDescriptor.getAuthenticator(), by either requiring dependencies to specify the type of authenticator they're looking for, or (in the case of authenticator-specific role attributes) enabling individual authenticators to declare the role attributes they need. patch by jcshepherd; reviewed by <Reviewers> for CASSANDRA-20834
83f14f4 to
b192ada
Compare
… (CASSANDRA-20834 for CEP-50) With negotiated authentication (CEP-50), nodes may be configured with multiple authenticators. Prior to this change, a number of areas in the code assumed that there was a single configured authenticator and contained logic that switched depending on the authenticator type. This logic won't work when multiple authenticators can be configured. This change eliminates most calls to DataDescriptor.getAuthenticator(), by enabling individual authenticators to declare the role attributes they support, requiring callers to specify the type of authenticator they're looking for, and directly returning whether the node can enforce authn or not. Testing done: Unit tests for auth and config packages; d-tests for auth-related functionality (e.g. ColumnMasks). patch by jcshepherd; reviewed by TBD for CASSANDRA-20834
b192ada to
9aa01c9
Compare
|
Rebased and revised per Stefan's feedback. |
| } | ||
|
|
||
| private static void applyGuardrails() | ||
| public static void applyGuardrails() |
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.
I'm not thrilled with this, but I didn't see a cleaner way of initializing or defaulting guardrails config to enable CassandraRoleManager to construct in a unit test environment, without fully initializing DatabaseDescriptor. (If guardrails aren't explicitly initialized, CassandraRoleManager NPEs in the constructor.) Open to other suggestions.
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.
@jcshepherd what about calling DatabaseDescriptor.daemonInitialization() ? If you grep its usage, it is widely used in tests for these reasons.
You can also mock static methods like this, similar technique for DD you would be doing here
Factoring out assumption of a single node-wide authenticator (CASSANDRA-20834 for CEP-50)
With negotiated authentication (CEP-50), nodes may be configured with multiple authenticators. Prior to this change, a number of areas in the code assumed that there was a single configured authenticator and contained logic that switched depending on the authenticator type. This logic won't work when multiple authenticators can be configured. This change eliminates most calls to DataDescriptor.getAuthenticator(), by either directly returning whether the node can enforce authn or not, requiring dependencies to specify the type of authenticator they're looking for, or (in the case of authenticator-specific role attributes) enabling individual authenticators to declare the role attributes they need.
Testing done: Unit tests for auth and config packages; d-tests for auth-related functionality (e.g. ColumnMasks).
patch by jcshepherd; reviewed by for CASSANDRA-20834