-
Notifications
You must be signed in to change notification settings - Fork 186
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
sso_proxy: reduce direct calls to ValidateGroup() and clean up logic #275
base: main
Are you sure you want to change the base?
Conversation
26a857d
to
7ccc864
Compare
Codecov Report
@@ Coverage Diff @@
## master #275 +/- ##
=========================================
- Coverage 62.51% 62.3% -0.21%
=========================================
Files 54 54
Lines 4199 4197 -2
=========================================
- Hits 2625 2615 -10
- Misses 1385 1394 +9
+ Partials 189 188 -1
|
sso_auth: fix tests sso_proxy: fix sso provider tests sso_proxy: more tests session_state: add extra tests
1afa378
to
0ae7ffd
Compare
- rename 'RefreshSession' to 'RefreshSessionToken' - rename 'options' package (containing the validators) to 'validators'
internal/proxy/oauthproxy.go
Outdated
return err | ||
} | ||
} | ||
allowedGroups := p.upstreamConfig.AllowedGroups |
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 we put the allowed groups in the validator error message instead of pulling them out this way? I think it could make the logline easier to understand which set of validators rejected a user?
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.
Added the allowed groups into the group validator error message. Below is an example of the error message displayed to users (the same formatting is used for the log lines).
Also removed a chunk of formatting logic around the errors as it was becoming over-engineered and unnecessary. We could also add some extra context to errors coming from the domain/email address validators, but as is the error message would become pretty bloated if multiple validators returned errors - so perhaps worth addressing that separately?
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.
A few comment nits -- but once those are cleared up I think this is good to go.
@jphines - ready for re-review. Main new logic changes consist of the change to the raised error if an unauthorised upstream is being requested to better handle the graceful introduction of this check, and formatting of the errors returned by the validators. Other than that, it's largely comment changes/additions. |
Problem
We are still calling
ValidateGroup()
directly withinsso_proxy
, but using the options/validator package elsewhere in the same logic path (originally partially due to circular imports). This makes it increasingly difficult to make sure we were running the right validations at the right time, and certain methods were growing in complexity and responsibility.Solution
Attempt to reunite some of the most problematic portions of code in related to the above.
High level overview of included changes:
extendDeadline
andwithinGracePeriod
to be part of the sessions package, instead of the providers package. (In fact, a version ofextendDeadline
already exists in the session package. We now use that instead)ValidateGroup
withininternal/proxy/providers/sso.go
to options/validator package calls withininternal/proxy/providers/oauthproxy.go
.runValidatorsWithGracePeriod
helper method here to help handle cases where we want to check if the auth provider is unavailable instead of explicitly denying authentication.ValidateSessionState
method toValidateSessionToken
, which seemed to better fit its responsibility.Notes
The perhaps less obvious change is that within the
Authenticate()
method we'll now only run validators when the refresh or validation period has expired.This is instead of running group validations when the refresh or validation period has expired, and domain/email validations on all proxied requests.
---------- EDIT -----------
Additional changes
This also now includes some logic to prevent the copying + use of a cookie authorised with upstream 'foo' with upstream 'bar'. A new
AuthorisedUpstream
value has been added to the session which is checked against the request host.For the time being, when caught this check will re-trigger the start of the oauth flow, primarily to help introduce this additional check in a graceful manner.
options
package now renamed tovalidators
to better represent its responsibility.